visited 13 states (5.77%)
Create your own visited map of The World or Triposo world travel guide for Android

2014-11-04

Java語言中 static / final 基本用法

static:

可以用來宣告一個函數或者變數,當一個函數或者變數被宣告為static時,

就具有唯一值的概念。此函數或變數永遠只佔著一組記憶體空間。不管該類別被new幾個object,

該值永遠都會是一樣的。

class test{
     static int iValue = 0;
     public test() {
     }
}
public class main {
     public static void main(String[] argv)  {
          test test1 = new test();
          test test2 = new test();
          System.out.println(test1.iValue);
          test2.iValue  = 10;
          System.out.println(test2.iValue);
          System.out.println(test1.iValue);
     }
}

當test這個類別裡的資料成員iValue被宣告為static型態, 

在main function裡面分別去new兩個object出來。 分別是test1, test2,

先印出test1的iValue出來(印出0,初始值是0), 

接著我們在test2這個object去將iValue設值設為10,

再去印出test2的iValue出來(此時會印出10), 

這時候再印出test1的iValue出來會發現印出的是10。 

原因是因為我們將iValue宣告成static了。而iValue成為一個共同的變數。 

這就是static 的一個特性,

特性一:永遠會是一個唯一值!

且static 還有一個特性,

特性二:static可以透過類別直接存取使用!

意思是我們其實不需要new 一個object出來。

也可以透過類別直接去存取該變數
class test{
     static int iValue = 0;
     public test() {
     }
}
public class main {
     public static void main(String[] argv)  {
          System.out.println(test.iValue);
     }
}

在main中,並沒有new一個object出來,也可以存取到test這個類別中的資料成員(iValue)

final: 相較於static,final的概念就容易了解許多。

可以用來宣告一個類別、函數、或者變數。 

類別:當宣告在類別上時,該類別就無法被繼承。

函數:當一個函數被宣告為final時,則繼承他的子類別無法覆寫 

變數:當一個變數被宣告為final時,意思是他是一個常數,是無法被修改的。 

使用static final需要注意一點,如上面所述說的,當我們有一個常數要宣告時, 

會宣告如下

public static final String strValue = "abc";

為什麼宣告這樣會有個風險呢?

因為java在進行compile的時候, 會將宣告成static final的變數,直接包進去程式裡面。 

System.out.println(strValue);

當你有類似存取strValue的code時,我們去把java會把compile成的class,decompile來看,

會發現它變成如下的code

System.out.println("abc");

風險在於若不是用易除邊譯除錯的IDE來寫程式,

有可能會誤將strValue的值改為"123"或其他值, 若忘了重新compile,

有其他物件去存取strValue就會發生錯誤。

我們可以利用static block來進行宣告的動作,如下:

static String strValue;
static{
     strValue = "abc";
}

如果用這樣的宣告方式,即可避免上面述說的問題!

這些也是同標籤文章 :

沒有留言: