描述:
由於對線上環境的修改,如果針對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.classpublic 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都需要被替換。