final型別變數引用引發的思考

2021-06-10 15:05:59 字數 358 閱讀 5036

修改了類a的final變數的值,由於類a在jar包中,把修改後的類a編譯成的class直接替換了jar包中的類a,類b執行時會呼叫類a的final值,結果執行類b時總是原來的結果,不是類a修改後的結果.

經過一段時間的**除錯總算找到了原因,原來jvm在編譯**時會把final型別的變數直接編譯為靜態值,即:類b在**中是引用類a中final變數的值的關係,但編譯為class時會把這個值視為靜態的編譯到類b中.所以出現了只替換jar中的類a的class得不到想要的結果.想要真正的結果還需要重新編譯類b並替換jar中類b的class才行,雖然類b沒有修改任何**但編譯後的class是不一樣的.

總結一下:修改了final型別的變數值後,所有引用了該變數的類都需要替換.

final 許可權 內部類 引用型別

final 不可改變。可以用於修飾類 方法和變數。final運用方面 1 修飾變數 基本型別的區域性變數,被final修飾後,只能賦值一次,不能再更改。2 區域性變數 引用型別 引用型別的區域性變數,被final修飾後,只能指向乙個物件,位址不能再更改。但是不影響物件內部的成員變數值的修改。3 成員...

多型 引用型別的強制型別轉換 final關鍵字

一 多型 多型性是oop中的乙個重要特性,主要是用來實現動態聯編的,換句話說,就是程式的最終狀態只有在執行過程中才被決定而非在編譯期間就決定了。這對於大型系統來說能提高系統的靈活性和擴充套件性 programmer p1 new chinese 建立子類物件 賦值給其父類的引用變數 呼叫方法 如果方...

變數的引用型別和非引用型別的區別

author liyuechao date 2014.8.8 algo1 3.cpp 變數的引用型別和非引用型別的區別 includevoid fa int a 在函式中改變a,將不會帶回主調函式 主調函式中的a仍是原值 void fb int a 由於a為引用型別,在函式中改變a,其值將帶回主調函...