本文共 1404 字,大约阅读时间需要 4 分钟。
类的初始化通常在以下场景中会发生:
new
关键字**创建一个类的对象时。final
常量**)和静态方法**时。java.lang.reflect
**包中的方法对类进行反射调用时。以下情况会导致主动引用,从而传触发类初始化:
new
操作符:创建类对象时会引发类的初始化。static
块**。以下情况不会引起类的初始化:
Son[] array = new Son[5];
**不会触发类的初始化。以下代码片段可以帮助理解类何时会被初始化:
package com.zfy.es.myes;public class T1 { static { System.out.println("main类被加载"); } public static void main(String[] args) throws ClassNotFoundException { //1. 主动引用 Son son = new Son(); // 反射调用不会导致类加载 // Class.forName("com.zfy.es.myes.Son"); //2. 被动引用:不会引起类的加载 // System.out.println(Son.b); // 数组格式不会导致类加载 // Son[] array = new Son[5]; // 常量不会触发父类与子类的初始化 // System.out.println(Son.M); } class Father { static int b = 2; static { System.out.println("父类被加载"); } } class Son extends Father { static { System.out.println("子类被加载"); } static int a = 100; static final int M = 1; }
当运行上述代码时,输出结果依次为:父类被加载 → main类被加载 → 子类被加载。
转载地址:http://alrpz.baihongyu.com/