当先锋百科网

首页 1 2 3 4 5 6 7

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析,初始化,最终形成可以被虚拟机执行的java文件。---->>类的加载机制

加载时机:

1,加载

2,验证
3,准备
4,解析
5,初始化
2~4步被称为连接;
什么时候必须进行初始化?
1,遇到new,getstatic,putstatic,invokestatic这四条指令时;生成这四条指令最         常见的java代码场景是:创建对象时(new关键字),读取和设置一个类的静态       字段(被final修饰,已在编译器把结果放入常量池的静态字段除外),以及调用     一个类的静态方法;
2,使用reflect包中的方法对,类进行反射调用的时候;
3,当初始化一个类的时候,发现父类还没有进行过初始化,则需要先触发对父类的初     始化;
4,当虚拟机启动时,用户需要指定一个主类(包括main方法),虚拟机会对其进行     初始化;
5,以上四种行为表示对该类进行主动引用;既然有主动引用也会有被动引用

被动引用例子:

//通过子类引用父类的静态字段不会导致子类的初始化
public class SuperClass
{
      static
      {
            System.out.println("SuperClass init");
      }
      public static int value = "123";
}

public class SubClass extends SuperClass
{
      static
      {
	    System.out.println("SubClass init");
      }
}

public static void main(String[] args)
{
	System.out.println(SubClass.value);
}