jse--静态常量弊端--java编译静态常量的机制
2013-11-01 15:59
176 查看
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文件不会变
这种问题以后得注意了。尽量不要使用静态常量,用属性文件来代替
文章来自:http://blog.csdn.net/hardwin/article/details/4575078
有一个类
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文件不会变
这种问题以后得注意了。尽量不要使用静态常量,用属性文件来代替
文章来自:http://blog.csdn.net/hardwin/article/details/4575078
相关文章推荐
- java编译静态常量的机制
- java编译静态常量的机制
- java谜题--java运行时修改引用类的静态常量
- java的堆,栈,静态代码区(常量区)
- 4.7-全栈Java笔记:静态初始模块与参数传值机制
- 测试java中静态常量和静态变量的区别
- (转)更新Java final常量后,请重新编译你的class
- java 静态 及 常量
- Java 语言静态变量和静态方法继承机制的吐槽
- Java 中包的概念,常量,静态与继承
- 深入java static关键字 浅析java类加载机制(解答java静态方法或变量无法访问非静态数据)
- 【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派
- 比较编译技术--Java 代码的静态编译和动态编译中的问题
- struts2 freemarker当中引进java 常量java静态方法
- Java编译时常量类型、赋值类型
- 【java】多态性实现机制——静态分派与动态分派
- Java设计模式---单例模式(双锁机制的弊端)
- java当修改final对象、常量值时要重新编译类
- Java枚举特殊类及其静态常量实例
- 内部类(成员、静态、方法)| java帮助文档 | 垃圾回收机制