class文件替换无效之常量引发的问题

大家都知道,在linux上部署的项目,如果只改一两个文件,那么替换class文件是最方便的。但是最近遇到了一个问题,就是替换掉class文件之后重启tomcat,竟然报错,找不到路径(因为我这个常量是一个路径名)。然后我去看日志,竟然还是指向的原来的路径,也就是更改之前的,我怀疑class文件有问题,是不是编译没成功(以前遇到过,很多人应该都遇到过这种问题),我又编译了一次再上传启动,还是报错。

接下来我就用反编译文件编译了一下这个class文件,一看没问题啊。然后我就面向百度/谷歌编程,众说纷纭,有说删除tomcat下面的work文件,有说直接替换war包的(这个应该可行,但是太麻烦了,因为本地还有代码没写完不能直接打包,还要改配置之类的,我就放弃了。)直到看到一篇关于常量的,那个博主也是遇到这个问题,提出了思考,他选择重新部署

那么我就想到了常量的编译,被修改的类文件,并不同普通的类文件,而是一个接口里面的静态常量。而在Java中,对常量和变量的处理是不一样的。常量是在编译期就已经确定的。也就是说:项目在经javac编译成class文件后,常量在应用中不是以常量名的形式存在的,而是以常量值的形式存在。常量类不再规范的一个类的时候,可能修改了一个类,其他的编译好的仍然使用原值。也就是说无论我怎么替换这个class文件,其他文件只要指向这个class文件里面的常量,都会加载之前的值,所以我直接把指向这个class文件的常量的文件全部删掉,重新替换,再重启,完美解决!!!

因为我在网上基本没找到解决的方法,所以我就记录下这个问题,顺便加强自己解决BUG的能力(以及写BUG的能力)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值