Java的初始化块、静态初始化块、构造函数的执行顺序

前两天做Java笔试题碰到了这么一个问题,代码没有记下来,靠着大概印象以及参考网上类似的题写出来,大致如下:

package com.forTest.testCLassInitialization;

/**
 * Name: Test
 * Author: xian
 * Email:
 * Comment: //TODO
 * Date: 2018-03-31 16:28
 */

class A{
    static {
        System.out.println("static init area A");
    }
    {
        System.out.println("instance init area A");
    }

    A() {
        System.out.println("A constructor");
    }
}

class B extends A{
    static {
        System.out.println("static init area B");
    }

    {
        System.out.println("instance init area B");
    }

    B() {
        System.out.println("B constructor");
    }
}

class C extends B{
    static {
        System.out.println("static init area C");
    }

    {
        System.out.println("instance init area C");
    }

    C() {
        System.out.println("C constructor");
    }
}

public class Test {

    static {
        System.out.println("static init area main");
    }

    {
        System.out.println("instance init area main");
    }

    Test() {
        System.out.println("main constructor");
    }

    public static void main(String[] args) {
        C c = new C();
        System.out.println("------------------");
        B b = new B();
    }
}

然后问题就是问你输出结果,我一开始能想到的就是考查类加载器的,但是凭着印象想了很久,也没想出答案(还是得再回去看书),只猜了个大概,后来考完再去网上找找类似的题,得到的打印顺序如下:
1. 父类的静态初始化块
2. 子类的静态初始化块
3. 父类的初始化块
4. 父类的构造函数
5. 子类的初始化块
6. 子类的构造函数
于是打了上面的代码试试,(在IDEA的环境下)得到的结果如下:
依夜知秋
看来还是学的不够深入,还得多看看书,找题目练习下。
更详细的内容可以参考以下文章:
Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值