一直以來,總說static修飾的變量是引用同一塊內存,final修飾的變量"不可變"",沒有什麼體會,就自己寫了方法,測了一把
class Test2{
public static User user;
public final User user2=new User("zuoqi2",1);
public static final User user3=new User("zuoqi3",1);
public void test() {
user=new User();
user.setAge(1);
user.setAge(2);
user2.setAge(1);
user2.setAge(2);
user3.setAge(1);
user3.setAge(2);
}
public static void main(String[] args) {
Test2 t=new Test2();
t.test();
t.user=new User();
System.out.println(user3.getAge());
user3.setAge(3);
System.out.println(user3.getAge());
Test2 t2=new Test2();
t2.user=new User();
System.out.println(t.user ==t2.user);
System.out.println(t.user2 ==t2.user2);
System.out.println(t.user3 ==t2.user3);
}
}
輸出結果爲
結論:
1.static作用於某個字段,一個static字段對每個類來說只有一份存儲空間,而非static字段是每個對象有一份存儲空間,故而無論類實例化幾次,該變量都是相同的.
2.final字段
當字段是基本類型時,意味着這是一個永不改變的編譯時常量,一個在運行時被初始化的值,你不希望它改變。
當字段是引用類型時,表示初始化時佔據一塊內存空間,但是隻允許初始化一次.
3.final修飾入參,表示在該函數內,不允許改變該變量的引用.
4.final方法,不允許子類重寫該方法.