java编译静态常量的机制

java虚拟机编译机制,静态常量在编译后,成为了常量,而不是原先的代码,例如:

有一个类

 

Contant.java

里面有一些静态常量

 

public static final String GONGDAN = "[email protected]";

public static final String ICT = "[email protected]";

 

然后在程序中有使用这些常量,Contant.GONGDAN

在那些程序编译后的.class文件中,这些常量成了相应的值,即[email protected],而不是Contant.GONGDAN

 

有一次在更新项目发布时一时大意,没将本地测试时更改成的本人邮箱改过来,就发布到服务器上了。当时就是Contant.java里面的GONGDAN常量。知道之后将Email改正过来,将Contant.java编译后的.class文件提交到服务器上相应class的包里面了。

但是,接下来的好几天,该给[email protected]发的邮件全发到之前我的那个邮箱里了。百思不得其解。到服务器上应用程序里使用操作系统的查找功能进行查找,没找到那个邮件地址。还一直以为是啥缓存的。

 

后来通过将使用到Contant.GONGDAN的.class文件反编译,发现Contant.GONGDAN的地方是我的email地址,而不是Contant.GONGDAN

 

而本地eclipse上改代码相关的地方会重新编译,不会出现这种情况。

而发布到服务器上,tomcat只负责解析jsp,servlet文件,.class文件不会变

 

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

 

 

你可能感兴趣的:(JAVA,java,服务器,servlet,string,email,eclipse)