论坛首页 Java企业应用论坛

class文件编译陷阱

浏览 2154 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (12) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-18  
在项目开发中我们经常应用第三方的jar包到自己的项目中,最近在做开发的时候发现一个问题,当我改变了一个jar里面的某一个类里面的一个静态常量的值,然后只把这个一个类class放入jar里面覆盖原来的class,但是再使用使用过程中发现其他地方引用的并没有改变成我改的值,后来反编译发现原来是直接这种情况在编译成class的时候是直接将对应的值编译在class里面而不是一个引用,想这种情况,如果要改变 我们需要把所有使用当的地方全部从新编译覆盖
   发表时间:2012-05-18  
你给一个方法去get就不同啦
0 请登录后投票
   发表时间:2012-05-18  
chenchuan 写道
在项目开发中我们经常应用第三方的jar包到自己的项目中,最近在做开发的时候发现一个问题,当我改变了一个jar里面的某一个类里面的一个静态常量的值,然后只把这个一个类class放入jar里面覆盖原来的class,但是再使用使用过程中发现其他地方引用的并没有改变成我改的值,后来反编译发现原来是直接这种情况在编译成class的时候是直接将对应的值编译在class里面而不是一个引用,想这种情况,如果要改变 我们需要把所有使用当的地方全部从新编译覆盖


这个是编译器做的优化, 这样可以减少寻找变量的开销,加快速度(想想一次调用的时间可以忽略,如果一天调用几千万次的时间就变得可见了 ), 好像有一个开关可以做控制的,有点忘了;

编译器从性能上考虑有很多的优化我们是不知道的, 如果发布是jar包发布的话, 更改了最好也是用jar包进行替换, 否则有时会扰乱编译器优化的结果.
0 请登录后投票
   发表时间:2012-05-20  
这个属于基本知识。
0 请登录后投票
   发表时间:2012-05-21  
我就吃过一次跟楼主一样的亏...
0 请登录后投票
   发表时间:2012-05-21  
woshiykk1 写道
我就吃过一次跟楼主一样的亏...

我遇到两次  第一次是用oracle的jdevelop开发 也这样 我以为只是这个ide的问题,结果eclipse也有同样的问题
0 请登录后投票
   发表时间:2012-05-22   最后修改:2012-05-22
这个为啥投新手帖啊,我之前也遇到过这问题,当时郁闷了半天。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics