四、类的主动使用与被动使用等

1.类的完整类名必须一致,包括包名。
2.加载这个类的ClassLoader(指ClassLoader实例对象)必须相同
换句话说,在JVM,几十这两个类对象(class对象)来源同一个Class文件,被同一个虚拟机加载,但只要加载他们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。

类的主动使用与被动使用

1.类的完整类名必须一致,包括包名。
2.加载这个类的ClassLoader(指ClassLoader实例对象)必须相同
换句话说,在JVM,几十这两个类对象(class对象)来源同一个Class文件,被同一个虚拟机加载,但只要加载他们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。

对类加载器的引用

JVM必须知道一个类型是由启动类加载器加载的还是由用户类加载器加载的,如果一个类型是由用户类加载器加载的,那么JVM会将这和类加载器的一个引用作为类型信息的一部分保存在方法区中,当解析一个类型到另一个类型的时候,JVM需要保证这两个类型的类加载器是相同的。

JAVA程序对类的使用方式分为:主动使用和被动是用
主动使用分为7种情况:
1.创建类的实例
2.访问某个类或接口的静态变量。或者对该静态变量赋值
3.调用类的静态方法。
4.反射(Class.forName)
5.初始化一个类的子类
6.Java虚拟机启动是被标明为启动类的类
7.JDK7开始提供的动态语言支持:java.lang.invoke.MethodHandle实例的解析结果
REF_getStatic、REF_putStatic句柄对应的类没有初始化,则初始化。

除了以上七种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化。

你可能感兴趣的:(java虚拟机,jvm,java,开发语言)