JAVA类实例化时,子类和父类中的构造方法,静态代码块,代码块和普通方法的调用顺序

本文详细解析了JAVA中子类和父类构造方法、静态代码块、代码块及普通方法的调用顺序,通过具体示例演示了类实例化过程中的执行流程。

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

通过这篇文章总结一下JAVA类实例化时,子类和父类中的构造方法,静态代码块,代码块和普通方法的调用顺序,首先编写两个测试类:

父类:

public class Father {
    {
        System.out.println("父类代码块");
    }
    static {
        System.out.println("父类静态代码块");
    }
    public Father(){
        System.out.println("父类构造方法");
        hehe();
    }
    public void hehe(){
        System.out.println("父类hehe方法");
    }
}

子类:

public class Son extends Father{
    {
        System.out.println("子类代码块");
    }
    static {
        System.out.println("子类静态代码块");
    }
    public Son(){
        System.out.println("子类构造方法");
        hehe();
    }
    public void hehe(){
        System.out.println("子类hehe方法");
    }
}

测试方法:

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

输出的顺序是:

父类静态代码块
子类静态代码块
父类代码块
父类构造方法
子类hehe方法
子类代码块
子类构造方法
子类hehe方法

其实规律也很简单,只有以下几条:

  1. 静态代码块在类加载时就会被执行;
  2. 子类的构造方法中会默认加上调用父类构造器的方法super(),并且加在构造器代码的第一行;
  3. 普通代码块的方法会被编译进构造器,并加在super()的后面;
  4. 调用类中的其他方法会默认加上this。

根据规则1,所以首先输出的是静态代码块中的内容,然后根据规则2,Son中调用super(),所以会先调用Father的构造器。又根据规则3,所以先输出父类普通代码块中的内容,再输出父类构造器的内容;父类中调用hehe(),调用方式可以看成this.hehe(),此时的this为Son,所以输出的是Son的hehe方法。接下来在输出Son中的代码块和构造方法的内容,最后输出Son的hehe方法内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值