以下是我所做的:
- 编译了包含更改后的最终静态值的文件
- 用步骤1中编译的文件更新服务器中对应的.class文件
- 将"xxx.war.deploy"更改为"xxx.war.dodeploy"以重新部署战争
在这之后,我想最终的静态值应该更新,但它没有。
只是我删除了整个战争文件,上传并再次部署。值最终更新。
那么,是什么原因造成的呢?最终静态值的使用寿命是否与JVM相同?
基元或字符串类型的静态最终变量实际上是编译时常数,因此,无论它们在哪里使用,都会直接内联。因此,您将丢失对原始类的引用,并且当该类更改时不会发生更新。您需要完全重新编译。
有很多方法可以解决这个问题,但没有一种特别令人愉快。例如,您可以使用static方法来返回常数值。
这是由于静态变量在ClassLoader加载类时被Loaded,而在可以卸载类时被卸载,而当使用的ClassLoader被垃圾收集时可能会发生这种情况。