先编译下面两个class,PrintWords、Words,然后运行看看结果是什么
public class PrintWords {
public static void main(String[] args) {
System.out.println(Words.FIRST + " " +
Words.SECOND + " " + Words.THIRD);}}public class Words {
public static final String FIRST = "the";
public static final String SECOND = null;
public static final String THIRD = "set";}然后,用下面的Words替换上面的Words,只重新编译 Words class,不要重新编译 PrintWords class然后运行看看结果public class Words {
public static final String FIRST = "physics";
public static final String SECOND = "chemistry";
public static final String THIRD = "biology";
}
public class PrintWords {
public static void main(String[] args) {
System.out.println(Words.FIRST + " " +
Words.SECOND + " " + Words.THIRD);}}public class Words {
public static final String FIRST = "the";
public static final String SECOND = null;
public static final String THIRD = "set";}然后,用下面的Words替换上面的Words,只重新编译 Words class,不要重新编译 PrintWords class然后运行看看结果public class Words {
public static final String FIRST = "physics";
public static final String SECOND = "chemistry";
public static final String THIRD = "biology";
}
标记为static final的已赋值字段, 在不编译主执行程序的情况下,将不从引用类中读取,
标记为null的字段会从所在类读取.考虑到java的javac
标记为static final的已赋值字段, 在不编译主执行程序的情况下,将不从引用类中读取,
标记为null的字段会从所在类读取.考虑到java的编译器javac带有一些自动编译发布的功能(执行 javac PrintWords.java会自动
检查PrintWords所关联的类并且编译), 我想我们有理由相信对于static final字段javac在
编译的时候会把这些不会改变的值预编译进本文件(PrintWords.class)的字节码中, 当然null
是不会的.恩..另外这件事情也说明, 调试程序的时候要全编译比较保险....