分析类的初始化

1.8、分析类的初始化

public class Test06 {
    static {
        System.out.println("Main类被加载");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        //1.主动引用
        //Son son = new Son();

        //反射也会被主动引用
        //Class.forName("com.xu.reflection.Son");

        //不会产生类的初始化
        //System.out.println(Son.b);
        //Son[] sons = new Son[10];
        System.out.println(Son.M);
    }
}
class Father{
    static int b =1;
    static {
        System.out.println("父类被加载");
    }
}
class Son extends Father{
    static {
        System.out.println("子类被加载");
        a =30;
    }
    static int a =10;
    public final static int M = 100;
}

分析:

  1. 产生类的初始化
    • new一个实例会初始化,先加载Main类,再加载父类,最后加载子类
    • 反射一个实例也会初始化
  2. 不产生类的初始化
    • 通过子类名调用父类静态资源,加载Main类,再加载父类,不加载子类
    • 创建一个类的数组 只加载Main类
    • 通过类名调用常数 只加载Main类
posted @ 2020-06-28 10:23  小徐学狂  阅读(105)  评论(0编辑  收藏  举报