Java的变量初始化顺序问题

图片说明

结果为0 很有意思 有木有!变量初始化顺序是显示初始化之后再构造方法初始化对吧,
答案为何如此,求详解

 class Base 
{
    private int i = 2;
    public Base()
    {
        System.out.println(i);
        this.display();
    }

    public void display()
    {
        System.out.println(i);
    }
}
class Derived extends Base
{
    private int i = 22;
    public Derived()
    {
        //System.out.println(i);
        i = 222;
    }
    public void display()
    {
        System.out.println(i);
    }
}
public class Test
{
    public static void main(String[] args)
    {
        new Derived();
    }
}

1.在调用构造初始化之前,会首先对成员变量进行自动初始化。
public class Counter {
int i;
Counter() {
i = 7 ;
}
}

i的值首先会被置为0,然后才是调用构造器,使得i变成7。

2.成员变量的初始化顺序为定义的先后顺序。
class Bowl {
Bowl(int mar......
答案就在这里:JAVA变量初始化顺序
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

本质上
private int i = 2;
其实这段代码还是放在构造函数中执行的,并且先于构造函数中你写的任何代码执行。
基类的构造函数先执行,再执行派生类的。

先对成员变量进行初始化,在调用构造函数