通过下面的两个例子简单了解一下常量与类的加载的关系。
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的值,只有在加载时才能够确定。
结论:当一个类调用静态常量时,类是不会被加载。
本文通过四个示例探讨了静态常量与类加载之间的关系。指出若常量能在编译时确定其值,则类无需加载即可使用该常量;反之,如常量值依赖于运行时状态,则需在类加载后才能确定。

433

被折叠的 条评论
为什么被折叠?



