2015年3月23日 星期一

Static的解釋

基本上, 當一個變數被宣告成 static 的時候,

就表示它在記憶體裡只會有"一個它"存在...

** EX.1 **

public class TestA {
public static int num;

public static methodA() {
....
}
....
}

從上面的例子來看,

假如你製造出三個 TestA 的物件,

其變數 num 還是只有一個,

也就是說, 那三個 TestA 的物件分享的那個變數 num...

所以, 當其中一個 TestA 改變了 num 的值,

另外兩個 TestA 物件裡的 num 也會跟著改變 (因為都是同一個 num)...

還有, static 提供了一個直接存取的作用,

也就是說, 不用先做出 TestA 的物件就可以得到或使用 num 的值...

** EX.2 **

public class TestB {

public void methodB() {
if (TestA.num == 1) {  //直接使用 num
TestA.methodA();  //直接使用 methodA
....
}
....
}

從上面的例子來看, 我們就可以發現到,
只要有 class 的名稱加上 "." 再加上變數的名稱就可以直接用其值...

至於 static 方法也是一樣, 不用先做出 TestA 的物件就可以使用其方法 (看 EX.2)...

不過, static 方法與變數不同之處是 static 方法沒有單一性, 而變數有...

另外, 有一點要特別注意的,

就是"只有 static 的變數才能被 static 的方法處理"...

原因是 static 方法能直接被使用, 而"非 static 的變數"則必須要等物件被製造出來後才存在...

...........

嗯... 至於 static 的變數和方法的使用時機嘛...

原則上是能不用就不用, 直到有某些特殊情況才用...

譬如說有需要令某變數非單一存在不可, 或是需要直接存取其值等等...