Java關鍵字static、final使用
阿新 • • 發佈:2018-11-27
static
1. static變數 按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類變數;另一種是沒有被static修飾的變數,叫例項變數。兩者的區別是: 對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問(方便),當然也可以通過物件來訪問(但是這是不推薦的)。對於例項變數,沒建立一個例項,就會為例項變數分配一次記憶體,例項變數可以在記憶體中有多個拷貝,互不影響(靈活)。 2. static程式碼塊 final
在Java中宣告屬性、方法和類時,可使用關鍵字final來修飾。
final變數即為常量,只能賦值一次;
final方法不能被子類重寫;
final類不能被繼承。
1. final變數
宣告 final 欄位有助於優化器作出更好的優化決定,因為如果編譯器知道欄位的值不會更改,那麼它能安全地在暫存器中快取記憶體該值。final 欄位還通過讓編譯器強制該欄位為只讀來提供額外的安全級別。
其初始化public class TestStaticFinal {
private static final String strStaticFinalVar = "aaa";
private static String strStaticVar = null;
private final String strFinalVar = null;
private static final int intStaticFinalVar = 0;
private static final Integer integerStaticFinalVar = new Integer(8);
private static final ArrayList<String> alStaticFinalVar = new ArrayList<String>();
private void test() {
System.out.println( "-------------值處理前----------");
System.out.println( "strStaticFinalVar=" + strStaticFinalVar + "");
System.out.println( "strStaticVar=" + strStaticVar + "");
System.out.println( "strFinalVar=" + strFinalVar + "");
System.out.println( "intStaticFinalVar=" + intStaticFinalVar + "");
System.out.println( "integerStaticFinalVar=" + integerStaticFinalVar + "");
System.out.println( "alStaticFinalVar=" + alStaticFinalVar + "");
//strStaticFinalVar="哈哈哈哈";//錯誤,final表示終態,不可以改變變數本身.
strStaticVar = "哈哈哈哈"; //正確,static表示類變數,值可以改變.
//strFinalVar="呵呵呵呵"; //錯誤, final表示終態,在定義的時候就要初值(哪怕給個null),一旦給定後就不可再更改。
//intStaticFinalVar=2; //錯誤, final表示終態,在定義的時候就要初值(哪怕給個null),一旦給定後就不可再更改。
//integerStaticFinalVar=new Integer(8); //錯誤, final表示終態,在定義的時候就要初值(哪怕給個null),一旦給定後就不可再更改。
alStaticFinalVar.add( "aaa"); //正確,容器變數本身沒有變化,但存放內容發生了變化。這個規則是非常常用的,有很多用途。
alStaticFinalVar.add( "bbb"); //正確,容器變數本身沒有變化,但存放內容發生了變化。這個規則是非常常用的,有很多用途。
System.out.println( "-------------值處理後----------");
System.out.println( "strStaticFinalVar=" + strStaticFinalVar + "");
System.out.println( "strStaticVar=" + strStaticVar + "");
System.out.println( "strFinalVar=" + strFinalVar + "");
System.out.println( "intStaticFinalVar=" + intStaticFinalVar + "");
System.out.println( "integerStaticFinalVar=" + integerStaticFinalVar + "");
System.out.println( "alStaticFinalVar=" + alStaticFinalVar + "");
}
public static void main(String args[]) {
new TestStaticFinal().test();
}
} 輸出結果 -------------值處理前---------- strStaticFinalVar=aaa strStaticVar=null strFinalVar=null intStaticFinalVar=0 integerStaticFinalVar=8 alStaticFinalVar=[] -------------值處理後---------- strStaticFinalVar=aaa strStaticVar=哈哈哈哈 strFinalVar=null intStaticFinalVar=0 integerStaticFinalVar=8 alStaticFinalVar=[aaa, bbb]