static静态代码块加载和执行

静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行?

1.父类Father

package com.java4all.test10;
public class Father {

    static {
        System.out.println("father的静态代码块");
    }

    {
        System.out.println("father的非静态代码块");
    }

    public Father() {
        System.out.println("father的构造方法");
    }

}

2.子类Son

package com.java4all.test10;
public class Son extends Father{

    static {
        System.out.println("son的静态代码块");
    }

    {
        System.out.println("son的非静态代码块");
    }

    public Son() {
        System.out.println("son的构造方法");
    }

}

3.测试类

package com.java4all.test10;
public class Test1 {
    public static void main(String[] args){
        System.out.println("创建son对象前");
        Son son = new Son();
        System.out.println("创建son对象后");
    }
}

结果:

创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的构造方法
son的非静态代码块
son的构造方法
创建son对象后

4.如果父类没有无参构造,只有有参构造

这种情况,子类需要在构造方法中显示的调用父类的有参构造

父类

public class Father {

    static {
        System.out.println("father的静态代码块");
    }

    {
        System.out.println("father的非静态代码块");
    }

    //public Father() {
    //    System.out.println("father的构造方法");
    //}

    public Father(Integer a) {
        System.out.println("father的带参构造方法");
    }

}

子类

public class Son extends Father{

    static {
        System.out.println("son的静态代码块");
    }

    {
        System.out.println("son的非静态代码块");
    }

    public Son() {
        //父类没有无参,只有有参,需要显示调用父类的有参构造
        super(5);
        System.out.println("son的构造方法");
    }

    public Son(Integer a) {
        //父类没有无参,只有有参,需要显示调用父类的有参构造
        super(5);
        System.out.println("son的带参构造方法");
    }
}

结果:

创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的带参构造方法
son的非静态代码块
son的构造方法
创建son对象后

5.如果父类没有无参构造,也没有有参构造

子类的构造只管自己就好,不用管父类的构造了。

6.总结

总的来说,按照如下的大顺序调用:
父类静态代码块
子类静态代码块

父类非静态代码块
父类构造函数

子类非静态代码块
子类构造函数

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值