标签:过程 引用 方法 直接 stat mda 连接 成员 --
一、类的生命周期
二、类加载的时机
a) 加载、验证、准备、初始化是按照先后顺序依次执行的
b) 解析过程会发生在初始化过程中
a) 在类加载过程中遇到如下指令(new、getstatic、putstatic、invokestatic),如果当前的类尚未初始化,那么就要进行初始化。分别对应的Java代码场景为:
b) 使用Java.lang.reflect进行发射调用的时候,如果这个类没有被初始化,那么就要先进行初始化
c) 当初始化一个类时,如果这个类的父类还没有被初始化,那么先初始化这个类的父类,再初始化这个类
d) 当虚拟机启动的时候,虚拟机会首先初始化带有main方法的类
JVM虚拟机规范中要求在程序运行过程中,“当且仅当”出现上述4个条件之一的情况才会初始化一个类。如果间接满足上述初始化条件是不会初始化类的。其中,直接满足上述初始化条件的情况叫做主动引用;间接满足上述初始化过程的情况叫做被动引用。
那么,只有当程序在运行过程中满足主动引用的时候才会初始化一个类,若满足被动引用就不会初始化一个类。
类和接口都需要初始化,他们初始化的过程大致相同,不同点在于:类初始化过程中如果发现该类的父类尚未被初始化,那么会先初始化父类,然后再初始化这个类;但是接口初始化的时候,并不要求父类已经全部初始化,当程序运行过程中需要用到父类的东西的时候在初始化父类接口。
标签:过程 引用 方法 直接 stat mda 连接 成员 --
原文地址:https://www.cnblogs.com/BaoZiY/p/10632227.html