「知识点」Java中静态代码块、构造代码块和构造方法的执行顺序

  今年六月份的时候,一次应聘的面试中,要求做一些笔试题,其中遇到了一道这样的笔试题,有两个类A和B,B继承了A,并且在A和B两个类里的静态代码块、构造代码块和构造函数都有打印一些内容,要求写出打印的顺序。
  当时写的时候把结果写反了,不过面试官很nice,把笔试题中有问题的部分都指出来了,并和我一起对问题做了分析,并得出正确的结论应该是什么样子的。

public class StaticBlockDemo {
    public static void main(String[] args) {
        new B();
    }

    public static class A {
        static {
            System.out.println("A->静态代码块");
        }
    
        {
            System.out.println("A->构造代码块");
        }
    
        public A() {
            System.out.println("A->构造函数");
        }
    }
    
    public static class B extends A {
        static {
            System.out.println("B->静态代码块");
        }
    
        {
            System.out.println("B->构造代码块");
        }
    
        public B() {
            System.out.println("B->构造函数");
        }
    }
}

  运行main方法后得出的结果如下:

A->静态代码块
B->静态代码块
A->构造代码块
A->构造函数
B->构造代码块
B->构造函数

  虽然最后因为某些原因不能够加入这家公司,但对面试官和公司的印象还是非常棒的。
  以此记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注