场景:
public class TppsPath {
static final String name = "小花";
}
public class Test {
public static void main(String args[]){
System.Out.Println(TppsPath.name);
}
}
某个类引用了该变量值。
由于需求变更,需要更改name = "小明",直接更改了包含此静态变量的类文件,并编译成class,把测试环境中相应的class文件替换为新编译的文件。(增量部署)。
但是引用的类并不重新编译,替换。
现象:
测试发现,引用静态变量的类中,值仍然没有变过来,还是小花,并不是重新编译的小明。
解决:
查阅资料发现:
static final常量是在java编译期就进行赋值的,编译完成后,Test.class类用反编译工具打开你会发现是这样式儿的:
public class Test {
public static void main(String args[]){
System.Out.Println("小花");
}
}
所以只替换TppsPath 类的编译文件的话,并不能改变Test类,因为他没有跟着TppsPath 重新编译,导致数据还是原来的数据。
总