最近在对一个产品出升级补丁时遇到一个问题,与静态常量有关。
问题现象:
产品包中有一个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,添加到产品包中,新功能生效。
问题原因:
开始怀疑是编译环境jdk
版本不一致导致的,于是尝试使用相同jdk编译,问题依旧。
后来怀疑是静态常量导致的问题,更新静态常量时,要同时更新引用该静态常量的类,并确保该类已经重新编译。因为静态常量被引用时,在编译期就已经确定了值,在运行期不会动态加载对应的值。
参考资料:
http://blog.csdn.net/ahhsxy/article/details/6097881