考虑这种情况:
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
通常,您会期望编译器内联 ONE 和 TWO 常量。但是,这种行为是否得到保证?您可以在运行时在类路径中部署没有 Class1 的 Class2,并期望它不管编译器如何都能工作,或者这是一个可选的编译器优化?
编辑:到底为什么要这样做?好吧,我有一个常量,它将在应用程序的两端(通过 RMI 的客户端和服务器)之间共享,在这种特殊情况下,将常量放在只能位于该分隔线一侧的类上会非常方便(因为它在逻辑上是拥有该常量值的那个)而不是仅仅因为它需要由代码的双方共享而将它放在任意常量类中。在编译时它的所有一组源文件,但在构建时它是按包划分的。