java静态数据初始化

java中的静态数据初始化是比较复杂的,看下面的演示程序:
class Bowl {

Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}

void f(int marker) {
System.out.println("f(" + marker + ")");
}
}

class Table {
static Bowl b1 = new Bowl(1);                        //1
static Bowl b2 = new Bowl(2);                        //2
Table() {
System.out.println("Table()");                    //3
b2.f(1);                                        //4
}

void f2(int marker) {
System.out.println("f2(" + marker + ")");
}


}

class Cupboard {
Bowl b3 = new Bowl(3);                                //7            //11        //15
static Bowl b4 = new Bowl(4);                        //5
static Bowl b5 = new Bowl(5);                        //6

Cupboard() {
System.out.println("Cupboard()");                //8            //12        //16
b4.f(2);                                        //9            //13        //17
}

void f3(int marker) {
System.out.println("f3(" + marker + ")");
}


}

public class StaticInitialization {
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");    //10
new Cupboard();                           
System.out.println("Creating new Cupboard() in main");    //14
new Cupboard();
t2.f2(1);                                        //18
t3.f3(1);                                        //19
}


}
输出结果为:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
注意标注的程序运行顺序
原文地址:https://www.cnblogs.com/macula7/p/1960743.html