【Java踩坑記】—— final關鍵字

描述:

        由於對線上環境的修改,如果針對1-2個class文件的修改,就直接替換編譯後的class文件。於是在更改了某個文件的一個變量之後,下意識的去編譯,然後升級。

        然後發現修復的bug並沒有被fix。頭大之後靜下來看代碼。發現了自己犯蠢了。

問題:

	public final  static String URL19E="***************"; ①
	public final  static String URL19E="###############"; ②

          由①改到②,僅此一個小小的修改。

          問題就出在這個final;

代碼:    

        FinalTest1.java

public class FinalTest {

    public final static String URL = "********";
    public static void main(String[] args) {
        System.out.println(URL);
    }
}
        FinalTest1.class
public class FinalTest {
    public static final String URL = "********";

    public FinalTest() {
    }

    public static void main(String[] args) {
        System.out.println("********");
    }
}

        我們可以看到,final變量在class文件中已經被替換,final修飾的變量在編譯期就決定確定值了。

        同理如果直接替換class文件,如果在其他的文件中引用的URL變量,還是之前的替換後的字符串。所以如果要替換class文件,則所有引用的class都需要被替換。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章