常量池也可以理解为编译常量。而编译常量只加载类就可以使用了,但是不执行类的初始化。
2
FinalClassB static block
0
感谢金丝燕大学校长
在使用成员变量的时候,要区分一下当前的类是已经加载状态还是已经初始化状态。如下面的例子:
import java.util.Random;
class FinalClassA
{
public static final int x =6/3;
static
{
System.out.println("FinalClassA static block");
}
}
class FinalClassB
{
public static final int x =new Random().nextInt(100);
static
{
System.out.println("FinalClassB static block");
}
}
public class Test {
public static void main(String[] args)
{
System.out.println(FinalClassA.x);
System.out.println(FinalClassB.x);
}
}
输出结果为:
2
FinalClassB static block
0
感谢金丝燕大学校长