例:
final string s = 「aaa」;
final map map = new hashmap()
s = "bbb";
map.put("aa","111");
結果是s報錯,map成功執行。
fianl的特性是:
final修飾的類不能被繼承;
final就是的方法不能被重寫,可以被過載。
final修飾的變數不可修改。
到這裡是沒有毛病的,但是為什麼map就可以修改呢?
這裡我在網上查閱了一些部落格,資料說的是final修飾的變數不可被修改說的是引用不可被修改。
像string型別的變數本身的值是不可變得。修改string變數的值就是修改引用,直接執行另乙個記憶體位址了。即改變了引用,和final衝突。
而map集合就不一樣了,map集合進行內容操作時,只是在記憶體中修改值,並沒有重新指向新的位址,所以使用fianl修飾就算對map進行操作也沒有報錯。
ps:重寫和過載的區別
1.重寫必百須繼承,過載不用。
2.重寫的方法名,引數數目相同,引數型別兼度容,過載的方法名相同,引數列表不同
3.重寫的知方法修飾道符大於等於父類的方法,過載內和修飾符無關。
4.重寫不可以丟擲父類沒有丟擲的一般異常容,可以丟擲執行時異常
final修飾變數 與Stastic修飾的變數
一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...
可以修飾類的修飾符
外部類只能被public 預設訪問許可權 即default abstract final修飾,不能被private和protect修飾。原因 成員內部類和靜態內部類可以被public 預設訪問許可權 即default private protect abstract final修飾。這些修飾符只能修...
JAVA中的final修飾符
final 最終。作為修飾符 1 可以修飾類,變數,函式 2 被final修飾的類不可以被繼承,為了避免被繼承,被子類複寫功能 3 被final修飾的方法不可以複寫 4 被final修飾的變數是乙個常量,只能賦值一次,既可以修飾成員變數,也可以修飾區域性變數 當在描述事物時,一些資料的出現值是固定的...