java编译静态常量的机制
java虚拟机编译机制,静态常量在编译后,成为了常量,而不是原先的代码,例如:有一个类 Contant.java里面有一些静态常量 public static final String GONGDAN = "gongdan@ceopen.cn";public static final String ICT = "ictnetwork@ceopen.cn"; 然后
java虚拟机编译机制,静态常量在编译后,成为了常量,而不是原先的代码,例如:
有一个类
Contant.java
里面有一些静态常量
public static final String GONGDAN = "gongdan@ceopen.cn";
public static final String ICT = "ictnetwork@ceopen.cn";
然后在程序中有使用这些常量,Contant.GONGDAN
在那些程序编译后的.class文件中,这些常量成了相应的值,即gongdan@ceopen.cn,而不是Contant.GONGDAN
有一次在更新项目发布时一时大意,没将本地测试时更改成的本人邮箱改过来,就发布到服务器上了。当时就是Contant.java里面的GONGDAN常量。知道之后将Email改正过来,将Contant.java编译后的.class文件提交到服务器上相应class的包里面了。
但是,接下来的好几天,该给gongdan@ceopen.cn发的邮件全发到之前我的那个邮箱里了。百思不得其解。到服务器上应用程序里使用操作系统的查找功能进行查找,没找到那个邮件地址。还一直以为是啥缓存的。
后来通过将使用到Contant.GONGDAN的.class文件反编译,发现Contant.GONGDAN的地方是我的email地址,而不是Contant.GONGDAN
而本地eclipse上改代码相关的地方会重新编译,不会出现这种情况。
而发布到服务器上,tomcat只负责解析jsp,servlet文件,.class文件不会变
这种问题以后得注意了。尽量不要使用静态常量,用属性文件来代替
更多推荐
所有评论(0)