java 类加载与常量池

常量池,分为两种类型:Class文件的常量池和运行时常量池。前者指已编译Class文件中的一份数据。它包括了关于类,接口等中的常量和字符串常量。后者指方法区中的一块儿内存。

此处的常量池也可以理解为编译常量。而编译常量只加载类就可以使用了,但是不执行类的初始化。

在使用成员变量的时候,要区分一下当前的类是已经加载状态还是已经初始化状态。如下面的例子:

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

感谢金丝燕大学校长

你可能感兴趣的:(jvm)