java类中资源的加载顺序

1、创建一个Father类,如下:

public class Father {
    {
        System.out.println("父类的普通代码块1");
    }
    static {
        System.out.println("父类的static代码块1");
    }
    public String name;
    public int age;

    public Father() {
        System.out.println("调用父类的空参构造");
    }

    public Father(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("调用父类的有参构造");
    }
    static {
        System.out.println("父类的static代码块2");
    }
    {
        System.out.println("父类的普通代码块2");
    }

    public void doWork() {
        System.out.println("父类做事");
    }
}

2、创建一个Son类,继承Father类,并重写其中的方法:

public class Son extends Father {
    {
        System.out.println("子类的普通代码块2");
    }
    static {
        System.out.println("子类的static代码块1");
    }
    public Son() {
        System.out.println("调用子类的空参构造");
    }

    public Son(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("调用子类的有参构造");
    }
    static {
        System.out.println("子类的static代码块2");
    }
    {
        System.out.println("子类的普通代码块2");
    }

    @Override
    public void doWork() {
        System.out.println("子类做事");
    }
}

3、创建Test类,测试:

public class Test {
    public static void main(String[] args) {
        Son son = new Son();
        son.doWork();
        new Son("aa", 10);
    }
}

结果如下
在这里插入图片描述
4、修改子类的有参构造

public class Son extends Father {
    {
        System.out.println("子类的普通代码块2");
    }
    static {
        System.out.println("子类的static代码块1");
    }
    public Son() {
        System.out.println("调用子类的空参构造");
    }

    public Son(String name, int age) {
        super(name, age);
        this.name = name;
        this.age = age;
        System.out.println("调用子类的有参构造");
    }
    static {
        System.out.println("子类的static代码块2");
    }
    {
        System.out.println("子类的普通代码块2");
    }

    @Override
    public void doWork() {
        System.out.println("子类做事");
    }
}

结果如下
在这里插入图片描述

由以上代码可以看出,java类中资源的加载顺序为:父类静态代码块 → 本身静态代码块 → 父类普通代码块 → 父类的构造方法 → 本身普通代码块 → 本身的构造方法。

注意: 如果不显式声明,子类调用构造方法时默认都会调用父类的空参构造,区别请看两个测试结果的输出,Son类调用有参构造时输出了父类空参构造中的输出语句,而显式声明了父类的有参构造后,输出了父类有参构造中的输出语句。

以上属于个人见解,如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值