Java 在运行时未反映常量值
假设编译以下两个类。第一种是代表客户;第二,图书馆类Java 在运行时未反映常量值,java,compiler-construction,constants,Java,Compiler Construction,Constants,假设编译以下两个类。第一种是代表客户;第二,图书馆类 public class Test{ public static void main(String[] args) { System.out.println(Lib.FIRST + " " + Lib.SECOND + " " + Lib.THIRD); } } public class Lib{
public class Test{
public static void main(String[] args) {
System.out.println(Lib.FIRST + " " +
Lib.SECOND + " " +
Lib.THIRD);
}
}
public class Lib{
private Lib() { }; // Uninstantiable
public static final String FIRST = "the";
public static final String SECOND = null;
public static final String THIRD = "set";
}
印刷品:
{空集}
现在假设您按如下方式修改库类并重新编译它,但不编译客户端程序:
public class Lib{
private Lib() { }; // Uninstantiable
public static final String FIRST = "physics";
public static final String SECOND = "chemistry";
public static final String THIRD = "biology";
}
印刷品:
{化学集}
为什么
第二个
值发生了更改,而第一个
或第三个
值没有发生更改?编译时,编译器将内联值(即“the”和“set”),而null
则没有内联值。为了避免类似的情况,您可以使用访问器方法。这是一个已知的警告-在编译客户端程序时,常量是内联的,因此您还必须重新编译它
另请参见: