巧说Java构造块与静态块

咋们话不多说,直接上代码

class A{
    A(){
        System.out.println("构造函数");
    }
    {
        System.out.println("构造快");
    }
    static {
        System.out.println("静态块");
    }
}

运行试试,看看会打印出什么,哈哈

public class Demo {
    public static void main(String[] args) {
       A a = new A();
    }
}
静态块
构造快
构造函数

看出来了吗?

静态块是跟随着类模板加载的,就像人的眼睛一样,人在哪里,必然眼睛就在哪里,所以第一个是静态块。而构造块是在构造函数运行时除super()方法外首先运行的。

如果是继承,结果会是什么呢?

class Parent{
	static int time = 7;
    Parent(){
        System.out.println("Parent构造函数");
    }
    {
        System.out.println("Parent构造快");
    }
    static {
        System.out.println("Parent静态块");
    }
}
class Sun extends Parent{
	static int time1 = 7;
    Sun(){
        System.out.println("Sun构造函数");
    }
    {
        System.out.println("Sun构造快");
    }
    static {
        System.out.println("Sun静态块");
    }
}
public class Demo {
    public static void main(String[] args) {
       Sun a = new Sun();
    }
}
Parent静态块
Sun静态块
Parent构造快
Parent构造函数
Sun构造快
Sun构造函数

这是怎么回事呢?为啥和我们想象的不一样啊

这是因为生活中是先有父亲然后才有儿子,代码中也是一样的,当 new Sun() 的时候实例父亲对象已经存在,结合上面的总结,就可以得出答案。
执行顺序:

  • 父类静态(不区分方法和字段,直接按照先后顺序)
  • 子类的静态
  • 父类的构造快
  • 父类的构造方法
  • 子类的构造快
  • 子类的构造方法

现在你懂了吗

面试也会偶尔会问哦。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗罗的1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值