类初始化时机以及被动引用

1. 根据java虚拟机规范,严格规定了四种情况必须立即对类进行‘初始化’。

    1. 当程序进行new对象,读取,设置和调用类的不被final修饰的静态字段和方法。
    1. 初始化一个类,他的父类还没有进行初始化,则先初始化父类。
    1. 使用反射调用,如果类还没有进行初始化,需要先初始化这个类。
    1. 当虚拟机启动时,用户需要启动main方法,则main所在的这个类是需要进行初始化的。

2. 当我们去引用类的时候,不会造成类初始化的,我们成为被动引用,这里简单说一下被动引用的情况都有那些。

    1. 引用类被final static 同时修饰的字段,是不会造成类初始化的,因为被final static 修饰的字段会在编译期间进入常量池。
    1. 通过子类调用父类的静态字段,子类不会因此初始化,因为调用静态字段只会初始化这个静态字段所存在的类。
    1. 创建某个引用类型的类数组,是不会触发这个类初始化的,因为他会创建一个数组类型,并不是这个类类型,同时这个数组拥有的也不是这个类的方法,而是数组的方法。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容