巧说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{
    Parent(){
        System.out.println("Parent构造函数");
    }
    {
        System.out.println("Parent构造快");
    }
    static {
        System.out.println("Parent静态块");
    }
}
class Sun extends Parent{
    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() 的时候实例父亲对象已经存在,结合上面的总结,就可以得出答案。

现在你懂了吗

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

猜你喜欢

转载自blog.csdn.net/qq_42224683/article/details/107297017
今日推荐