4_关于类的主动使用和被动使用

关于类的主动使用和被动使用

在JVM当中表示两个class对象是否为同一个类存在的两个必要条件:

  • 类的完整类名必须一致,包括包名。
  • 加载这个类的ClassLoader必须相同。

换句话说,在JVM当中,即使这两个类对象(class对象)来源同一个class文件,被同一个虚拟机加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。

对类加载器的引用

JVM必须知道一个类是由系统类加载器还是扩展类加载器,亦或是引导类加载器加载的。如果一个类是由系统类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区,当解析一个类型到另一个类型的引用时,JVM需要保证这两个类型的类加载器是相同的。

Java程序对类的使用分为主动使用和被动使用

主动使用

  • 创建类的实例
  • 访问某个类或接口的静态变量,或者对静态变量赋值
  • 调用类的静态方法
  • 反射
  • 初始化一个类的子类
  • Java虚拟机在启动时被标明为启动类的类
  • JDK7开始提供的动态语言支持

被动使用

除了如上的主动情况,其它使用Java类的方式都被看做是对类的被动使用,都不会导致类的初始化。

posted @ 2024-03-14 13:10  LilyFlower  阅读(2)  评论(0编辑  收藏  举报