项目原因,突然出现个问题。因为当初在代码里面定义了个常量类,里面定义了些不常变更的参数,但是突然有天,客户说需要调整一下参数。于是就调整了重新编译了个常量类增量补丁放到服务器上,结果未生效。清理各缓存文件都未生效。
原因就是: JAVA对常量编译时,是直接将值编译到对应引用的地方,定义为了局部变量。如果改动常量定义,那么所有使用该常量的类,都需要重新编译,才能正常运行。
如何发现: 我们将服务器上的包,拷贝到测试环境。我突发奇想,将定义的常量类删掉,然后重启tomcat,结果服务正常启动起来了,并没有报什么找不到类的问题。 那么就说明了引用该常量类里面的参数时,并没有使用该类,或者说就是用错类了。
于是我去反编译使用常量类的其他类,找到一个类,里面并没有import所谓的常量类,也没有对应的常量参数。等找到对应的代码时,一个局部变量直接将常量定义的值写在那。
其实,这个问题,如果在了解JAVA编译的同学很快就能够判断出来了。加油吧少年!