静态常量被引用时,编译阶段即确定值

本文描述了一次仅修改产品包中静态常量后未达到预期效果的问题排查过程。揭示了静态常量在编译期间即确定值的特点,强调了更新静态常量时需同步更新所有引用该常量的类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在对一个产品出升级补丁时遇到一个问题,与静态常量有关。

[b]问题现象:[/b]
产品包中有一个product.jar,出升级补丁时,只修改了该jar包中的一个类中的一个静态常量。


public class AppConstant {
public static final String APP_NAME = "MyProduct";
}

改为

public class AppConstant {
public static final String APP_NAME = "MyProduct2";
}


将新的AppConstant.class添加到product.jar中后,发现没有实现预期的功能。
然后尝试重新生成完整的product.jar,添加到产品包中,新功能生效。

[b]问题原因:[/b]
开始怀疑是编译环境jdk版本不一致导致的,于是尝试使用相同jdk编译,问题依旧。
后来怀疑是静态常量导致的问题,更新静态常量时,要同时更新引用该静态常量的类,并确保该类已经重新编译。因为静态常量被引用时,在编译期就已经确定了值,在运行期不会动态加载对应的值。


[b]参考资料:[/b]
[url]http://blog.youkuaiyun.com/ahhsxy/article/details/6097881[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值