public static final 变量的编译之旅

一个问题如果反复的出现还熟视无睹,你总有一天会为此付出代价。

  • 遇到了蛋疼的事

项目中有很多的配置变量怎么办,大部分的人会想到使用yml、property、xml文件这样几种方法来处理,但是一不小心项目的开始使用的是一个类来处理,将变量作为类中的属性,并以 public static final 这三个关键字进行修饰。

以上的事情其实还不是很重要,重要的事,我们经常进行一些增量更新,所有的配置参数都写在A类当中,B类中应用了A类中的属性,如果该属性是一个public static final的String,恭喜你,那么在B类中编译过后并不会一直保留对A类的应用,而是字节已A类中的字符带你,所以你会惊喜的感觉到,不管你如何的替换A类的class文件,B类中的值并不会改变。

这个问题困扰了我很久,但是从一开始思考的方向就错了,我的思考方向是,对于public static final的变量,tomcat可能有特殊的机制,将其缓存在服务器上,但是并不是这样的,该问题需要我们关注的是java编译的具体过程。

  • 该项目的配置文件已经改用properties文件进行存储配置变量。

最后更新于