static代码块、成员变量初始化、构造方法执行顺序

本文通过几个示例详细解析了Java中父类与子类的静态代码块执行顺序、构造方法调用顺序以及成员变量初始化的过程。对于理解Java类加载机制及初始化流程具有较高的参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面代码:

public class Son{
    Father father = new Father();
    static{
        System.out.println("Son static");
    }
    public Son(){
        System.out.println("Son()");
    }
}

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

public class Main{
    public static void main(String[] args){
        Son son = new Son();
    }
}

结果:

Son static
Father static
Father()
Son()

结论

先执行static代码块,再初始化成员变量,再执行构造方法。


下面代码:

public class Son extends Father{
    //Father father = new Father();
    static{
        System.out.println("Son static");
    }
    public Son(){
        System.out.println("Son()");
    }
}

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

public class Main{
    public static void main(String[] args){
        Son son = new Son();
    }
}

结果:

Father static
Son static
Father()
Son()

结论

先执行父类的static代码块,再执行子类static,再执行构造方法。


下面代码:

public class Son extends Father{
    Father father = new Father(1);
    static{
        System.out.println("Son static");
    }
    public Son(){
        System.out.println("Son()");
    }
}

public class Father {
    static{
        System.out.println("Father static");
    }
    public Father(){
        System.out.println("Father()");
    }
    public Father(int a){
        System.out.println("Father(1)");
    }
}

public class Main{
    public static void main(String[] args){
        Son son = new Son();
    }
}

结果:

Father static
Son static
Father()
Father(1)
Son()

结论

先执行父类的static代码块,再执行子类static,再执行父类构造方法,再再初始化成员变量,再走子类构造方法剩下的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值