先放一个具体的例子在前边
package com.markhonest.practice;
public class InitializedOrder {
private static int x1 = printInit("static Insect.x1 initialized");
private int i = 9;
protected int j;
InitializedOrder(){
System.out.println("i = " + i + ", j = " + j);
j = 39;
}
static int printInit(String s){
System.out.println(s);
return 47;
}
public static void main(String[] args) {
InitializedOrder initializedOrder= new InitializedOrder();
System.out.println(initializedOrder.j); }
}
1)编译器会先加载这个类,这个时候会初始化静态全局变量x1。
2)然后会调用static的main方法,在例子中要创建类InitializedOrder的对象,这个时候会首先初始化全局变量i和j,对于没有在声明中初始化的基本变量j,初始化为0,如果这里是一个引用会初始化为null。
3)再然后会调用构造器,在例子中会先打印到控制台,然后给j赋值39。
控制台输出:
static Insect.x1 initialized
i = 9, j = 0
39