Java的初始化顺序

来源:互联网 发布:秦美人护符进阶数据 编辑:程序博客网 时间:2024/05/22 11:32
import static net.mindview.util.Print.*;class Insect{    private int i = 9;    protected int j;    Insect(){        print("i = " + i + ", j = " + j);   // System.out.println()        j = 39;    }    private static int x1 = printInit("static Insct.x1 initialized");    static int printInit(String s) {        print(s);        return 47;    }}public class Bettle extends Insect{    private int k = printInit("Bettle.k initialized");    public Bettle(){        print("k = " + k);        print("j = " + j);    }    private static int x2 = printInit("static Bettle.x2 initialized");    public static void main(String[] args){        print("Beetle constructor");        Bettle b= new Bettle();    }}

结果如下:
这里写图片描述
1. 由于调用static main,因此Bettle会被加载。
2. 由于Bettle是继承Insect类的,所以Insect类会被加载。
3. 由于一开始没有创建对象,因此只会初始化静态变量,从父类到子类。
4. 当创建对象b的时候,根据继承,会先初始化父类,从成员变量到构造函数,static成员只会初始化一次,之前被初始化了,因此现在不会初始化。

原创粉丝点击