美文网首页
类初始化时机

类初始化时机

作者: 凯玲之恋 | 来源:发表于2019-01-16 11:05 被阅读20次

虚拟机规范中严格规定有且只有5种情况下,当类没有初始化时必须立即对类进行初始化:

    1. 遇到new、getstatic、putstatic或invokeStatic这4条字节码指令时。常见场景:
    • 使用new关键字实例化对象时,触发new;
    • 读取类变量时,触发getstatic;(final常量除外)
    • 设置类变量时,触发putstatic;
    • 调用类的静态方法时,触发invokeStatic;
    1. 虚拟机启动时,需指定一个要执行的主类(含有main()的类),虚拟机会先初始化该类;
    1. 初始化一个类时,当其父类没有初始化,则需要先触发其父类的初始化;
    1. 使用java.lang.reflect包中的方法对类进行反射调用时;
    1. 当java.lang.invoke.MethodHandle实例最后的解析结果为REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且该句柄所对应的类没有进行过初始化;
      你所不知道的MethodHandle

上面讲到final常量不能触发类初始化,是由于在编译时已把数据放入常量池的静态字段,当读取类的static final字段时,并不需要初始化类,而是从常量池中去获取相应的数据

上述的5种场景的行为都是对类的一个主动引用过程。除此之外,还有被动引用并不会除非类的初始化过程。

相关文章

  • Java虚拟机(三)—类加载

    类加载时机 生命周期 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类初始化的四...

  • 类初始化时机

    虚拟机规范中严格规定有且只有5种情况下,当类没有初始化时必须立即对类进行初始化: 遇到new、getstatic、...

  • 我的秋招之路-面经篇

    Java基础 类加载的时机和类初始化的时机(引出tomcat类加载器)JVM和绝大多数用户自定义的类在JVM启动的...

  • Java类加载时机和初始化顺序

    类加载的时机和初始化的时机 摘自:https://www.cnblogs.com/javaee6/p/371471...

  • 类加载机制

    目录 概念 加载过程 初始化时机 类初始化顺序注意点 双亲委派模型 自定义类加载器 类加载 概念 Java虚拟机把...

  • 类加载的时机

    目录 1、类加载的生命周期2、类初始化阶段进行的时机(主动引用)3、被动引用(不会触发类初始化)4、接口的加载过程...

  • 类的初始化时机

    从语法角度来讲程序可以在两个地方对类进行初始化---定义类变量时指定初始值。---静态初始化块中对类进行初始化。 ...

  • Java类的初始化时机

    一个Java对象的创建过程往往包括 类初始化 和 类实例化 两个阶段。本文讨论的是『类初始化』的时机,以及利用这一...

  • 深入理解JAVA虚拟机6-虚拟机类加载机制

    类加载时机 类的生命周期:加载,验证,准备、解析、初始化、使用、卸载 遇到new getstatic putsta...

  • JVM学习笔记之类加载机制【八】

    一、类加载时机 1.1 触发类初始化的六个场景: 加载? 1、遇到new、getstatic、putstatic...

网友评论

      本文标题:类初始化时机

      本文链接:https://www.haomeiwen.com/subject/nugpdqtx.html