【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都需要被替换。






猜你喜欢

转载自blog.csdn.net/syy19940213/article/details/80941684