几个月之前,一位朋友很郁闷地找我,说 Java 做的网站调整了一个参数,本地测试没有问题,但是 commit 代码之后在服务器上 check out,就不起作用。
我通过 svn 看了一下两个版本的差异,发现朋友修改的是一个 static final 的变量,情况就开始明了了。检查一下,使用该常量的地方是在另一个 Java 文件的另一个类中,因为该文件没有被修改,所以没有重新编译生成新的 .class 文件。而 Java 编译器编译的时候,是直接把常量的值编译进 byte code 里的,运行时不会再有变量引用。删除这个过时的 .class 文件重新编译,一切都正常了。
Eclipse 使用的是自带的 Java 编译器,所以它编译的细节处理会跟 Sun 的(现在成 Oracle 了)有所区别。或者是因为 Eclipse 编译时是 Debug 的模式吧。
对新手来说,一不小心掉进这个陷阱,可能花好久才能挣扎出来……
觉得文章有用?立即:和朋友一起 共学习 共进步!
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习