package szsm;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author 2萌
* final:
* 1、final修飾符可以修飾局部變量、成員變量、方法、類
* 2、用關鍵詞final修飾的域成爲最終域。用關鍵詞final修飾的變量一旦賦值,就不能改變,也稱爲修飾的標識爲常量。如果一個類的域被關鍵字
* final所修飾,它的取值在程序的整個執行過程中將不會改變。
* 3、而對於對象引用,不能改變的是他的引用,而對象本身是可以修改的。一旦一個final引用被初始化指向一個對象,這個引用將不能在指向其他對象。
* java並未提供對任何對象恆定不變的支持。這一限制也通用適用於數組,它也是對象。
*/
public class FinalTest {
final static int a;
final String str;
final List list;
/**
* 注意一:
* 對final修飾的成員變量賦值,在靜態代碼塊或者是類的構造方法裏面。
* 注意兩種方法賦值時候final定義變量的不同寫法,如果是靜態代碼塊對其進行初始化時候必須加static關鍵字
* 但是對於在構造方法中初始化的時候不需要寫static關鍵字修飾
*/
FinalTest() {
str = "10";
list = new ArrayList();
}
FinalTest(String ii, List l) {
str = ii;
list = l;
}
static {
a = 3;
}
/*
* 注意二:
* final修飾的成員變量不可以在普通方法裏面對其賦值。
* 報錯提示:The final field FinalTest.a cannot be assigned
*/
// public void A () {
// a = 11;
// }
public static void main(String[] args) {
FinalTest finalTest = new FinalTest();
finalTest.list.add(new FinallyTest());
System.out.println("finalTest.str = " + finalTest.str + " " + finalTest.list.getClass());
// finalTest.A();
System.out.println(finalTest.a);
/**
* finalTest.list = new LinkedList();
* 對象的引用是不可以變化的
* 此語句異常提示:
* The final field FinalTest.list cannot be assigned
*/
// finalTest.list = new LinkedList();
finalTest = new FinalTest("zhangsan",new ArrayList());
finalTest.list.add(new FinallyTest());
System.out.println("finalTest.str = " + finalTest.str + " " + finalTest.list.getClass());
}
}
打印結果:
finalTest.str = 10 class java.util.ArrayList
3
finalTest.str = zhangsan class java.util.ArrayList