记静态常量遇到的坑

当Java类中的static final常量值变更时,仅替换该类的class文件无法更新引用它的其他类中的值,因为static final常量在编译时已赋值。解决方案是重新编译所有引用常量的类并替换对应的class文件。此外,final常量可以在定义时或构造器中初始化,但final static常量必须在声明时初始化,因为它在类加载时即被赋值。
摘要由CSDN通过智能技术生成

场景:
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 重新编译,导致数据还是原来的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值