Java基础--类变量初始化顺序

Java基础–类变量初始化顺序

以前总是碰到java类初始化的问题。今天自己跑了测试后,总结一下:

  1. 执行初始化父类的类变量和静态代码块(static block)。静态代码块和类变量初始化的执行顺序按照他们在代码中出现的持续排序
  2. 执行初始子类的类变量和静态代码块。和父类相同。
  3. 执行父类的构造函数(如果子类的构造函数没有显示调用super,则默认调用父类的无参构造函数。如果父类没有无参构造函数,则编译报错。)
  4. 初始化父类的实例变量:首先初始化,构造函数以外的实例变量,顺序按照在代码中出现的顺序相同。再初始化构造函数以内的实例变量,顺序和代码执行顺序相同。
  5. 执行子类的构造函数(super以后,如果显示调用的话)。
  6. 子类的实例变量初始化顺序和父类相同。

下面举例子:

package com.company;

class Dummy {
    public Dummy(String s) {
        System.out.println(s);
    }
}

class SuperClass {
    public static Dummy DUMMY = new Dummy("super DUMMY");
    static {
        System.out.println("Super static");
    }
    public Dummy aDummy = new Dummy("super aDummy");
    public Dummy bDummy;


    public SuperClass(String s) {
        System.out.println("super construct: " + s);
        cDummy = new Dummy("Super cDummy");
        bDummy = new Dummy("Super bDummy");
    }

    public SuperClass() {
        System.out.println("Super construct");
        cDummy = new Dummy("Super cDummy");
        bDummy = new Dummy("Super bDummy");
    }

    public Dummy cDummy = null;
    public static Dummy dDummy = new Dummy("super dDummy");
    public static Dummy eDummy;
    static {
        eDummy = new Dummy("super eDummy");
    }
    public static Dummy fDummy = new Dummy("super fDummy");
    public Dummy gDummy = new Dummy("gDummy");
}

class SubClass extends SuperClass {
    public static Dummy HDUMMY = new Dummy("hdummy");
    Dummy iDummy = new Dummy("iDummy");
    static Dummy jDummy = new Dummy("jDummy");
    Dummy kDummy;

    public SubClass(String s) {
        super(s);
        System.out.println();
        kDummy = new Dummy("kDummy");
    }

    static Dummy lDummy = new Dummy("lDummy");
    static Dummy mDummy;
    static {
        mDummy = new Dummy("mDummy");
        nDummy = new Dummy("nDummy");
    }
    static Dummy nDummy;
    static Dummy oDummy = new Dummy("oDummy");
}
public class Main {

    public static void main(String[] args) {
        SubClass subClass = new SubClass("hi");
    }
}

输出为:

super DUMMY
Super static
super dDummy
super eDummy
super fDummy
hdummy
jDummy
lDummy
mDummy
nDummy
oDummy
super aDummy
gDummy
super construct: hi
Super cDummy
Super bDummy
iDummy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值