new对象的时候类如何加载

父类Parent如下:

public class Parent {
    
    public static int age;
    char name;
    
    {   System.out.println("非静态属性name的值为"+name+";说明非静态属性已经初始化");
        System.out.println("父类的代码块");
    }
    static{
        System.out.println("静态属性age的值为"+age+";说明静态属性已经初始化");
        System.out.println("父类的静态代码块");
    }
    Parent(){
        System.out.println("父类无参构造");
    }       
}

子类Child如下:

public class Child extends Parent{
    {
        System.out.println("子类的代码块");
    }
    static{
        System.out.println("子类的静态代码块");
    }
    Child(){
        System.out.println("子类无参构造");
    }
    
    public static void main(String[] args) {
        System.out.println("-------------new第1个对象-------------");
        Child c = new Child();
        System.out.println("-------------new第2个对象-------------");
        Child c1 =  new Child();
    }
}

测试结果:

new对象的时候类如何加载_第1张图片
image.png

由上可以看出
step1:先加载child类,发现有父类则先加载父类,
加载过程:初始化静态变量-->执行父类静态块-->初始化实例变量
然后加载子类,执行子类静态块
step2:执行new,先执行父类里普通代码块,再执行父类无参构造,接着是子类的普通代码块,子类的无参构造
step3:第二次new的时候,由于类已经加载过,重复step2

你可能感兴趣的:(new对象的时候类如何加载)