zoukankan      html  css  js  c++  java
  • Java面试题之什么情况下会触发类的初始化

    以下情况会触发类的初始化:

    1. 遇到new,getstatic,putstatic,invokestatic这4条指令;
    2. 使用java.lang.reflect包的方法对类进行反射调用;
    3. 初始化一个类的时候,如果发现其父类没有进行过初始化,则先初始化其父类(注意!如果其父类是接口的话,则不要求初始化父类);
    4. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main方法的那个类),虚拟机会先初始化这个主类;
    5. 当使用jdk1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则先触发其类初始化;

    以下情况不会触发类的初始化:

    1. 同类子类引用父类的静态字段,不会导致子类初始化。至于是否会触发子类的加载和验证,取决于虚拟机的具体实现;
    2. 通过数组定义来引用类,也不会触发类的初始化;例如:People[] ps = new People[100];
    3. 引用一个类的常量也不会触发类的初始化
  • 相关阅读:
    中美土味摄影联合展览4.0
    计算机系统漫游
    Python连接Redis连接配置
    对kotlin和java中的synchronized的浅谈
    不务正业
    功能性测试分类
    Golang os/exec 实现
    面试研究所
    operator和if结构
    Mechanism for self refresh during C0
  • 原文地址:https://www.cnblogs.com/hujinshui/p/10422521.html
Copyright © 2011-2022 走看看