可以看到,对于final修饰的类变量,如果在编译的时候值已经确定了,那么在后边使用的时候不会导致类初始化;如果值在编译的时候不能确定,那么使用的时候会导致类初始化。例如上述代码中的compileConstant类变量的值在运行时才能确定,所以①处的代码必须保留对MyTest类的类变量的引用,该行代码就变为了使用MyTest的类变量,这将导致MyTest类被初始化。
可以看到,对于final修饰的类变量,如果在编译的时候值已经确定了,那么在后边使用的时候不会导致类初始化;如果值在编译的时候不能确定,那么使用的时候会导致类初始化。例如上述代码中的compileConstant类变量的值在运行时才能确定,所以①处的代码必须保留对MyTest类的类变量的引用,该行代码就变为了使用MyTest的类变量,这将导致MyTest类被初始化。