通过下面的两个例子简单了解一下常量与类的加载的关系。
class FinalTest
{
static
{
System.out.println("static block ");
}
public static final int a = 6/3;
}
public class Test1
{
public static void main(String[] args)
{
System.out.println(FinalTest.a);
}
}
输出结果为:2
class FinalTest
{
public static final int a = 6/3;
static
{
System.out.println("static block ");
}
}
public class Test1
{
public static void main(String[] args)
{
System.out.println(FinalTest.a);
}
}
结果为:2
import java.util.Random;
class FinalTest2
{
public static final int a = new Random().nextInt(10);
static
{
System.out.println("static block 2");
}
}
public class Test2
{
public static void main(String[] args)
{
System.out.println(FinalTest2.a);
}
}
结果为:6(随机的)
static block 2
import java.util.Random;
class FinalTest2
{
static
{
System.out.println("static block 2");
}
public static final int a = new Random().nextInt(10);
}
public class Test2
{
public static void main(String[] args)
{
System.out.println(FinalTest2.a);
}
}
结果为:4(随机的)
static block 2
四个程序不同的地方是a是否为常量还是变量,如果为常量时,在编译的时候就确定了值,所以不用加载就能够使用,而随机产生的在编译时不能确定a的值,只有在加载时才能够确定。
结论:当一个类调用静态常量时,类是不会被加载。