您的位置:首页 > 编程语言 > Java开发

java编译静态常量的机制

2009-09-21 10:20 225 查看
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文件不会变

 

这种问题以后得注意了。尽量不要使用静态常量,用属性文件来代替

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息