static和final的用法
阿新 • • 發佈:2018-12-12
一直以來,總說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方法,不允許子類重寫該方法.