类的实例化顺序实验

4 篇文章 0 订阅

public class Paramter {
    static {
        System.out.println("Paramter static");
    }

    public Paramter(String s){
        System.out.println("Paramter constructor " + s);
    }
}


public class Parent {

    private static Paramter staticParamter = new Paramter("Parent static");

    private Paramter paramter = new Paramter("Parent");

    static {
        System.out.println("Parent static");
    }

    public Parent(){
        System.out.println("Parent constructor");
    }

}

public class Children extends Parent{

    private static Paramter staticParamter = new Paramter("Children static");

    private Paramter paramter = new Paramter("Children");


    static {
        System.out.println("children static");
    }

    public Children(){
        System.out.println("children constructor");
    }

    public static void main(String[] args) {
        Children children1 = new Children();
        Children children2 = new Children();

    }

}

Paramter static
Paramter constructor Parent static
Parent static
Paramter constructor Children static
children static
Paramter constructor Parent
Parent constructor
Paramter constructor Children
children constructor
Paramter constructor Parent
Parent constructor
Paramter constructor Children
children constructor

结论

  1. 先加载静态成员变量的类,实例化静态成员变量,再执行静态代码块,实例化非静态成员变量,最后执行构造方法
  2. 如果有父类实例化父类的静态成员变量,静态代码块,再执行实例化子类的静态成员变量,子类的静态代码块,接着实例化父类非静态成员变量,然后是父类的构造方法,最后实例化子类非静态成员变量,然后子类的构造方法
  3. 静态代码块和静态成员变量只在类加载期间执行一次,后续实例化只运行非静态成员变量以及构造方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值