源代码:
class Bowl {
Bowl(int i) {
System.out.println("Bowl(" + i + ")");
} //构造器
void f1(int i) {
System.out.println("f1(" + i + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1); //2、加载Bowl类
Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int i) {
System.out.println("f2(" + i + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int i) {
System.out.println("f3(" + i + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("new Cupboard() in main");
new Cupboard();
System.out.println("new Cupboard() in main");
new Cupboard(); // 创建Cupboard()实例,不进行类加载(每个类只加载一次
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table(); // 1、创建对象实例,加载Table类,对静态变量进行初始化
static Cupboard cupboard = new Cupboard();
}
输出:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
请问代码的执行顺序是什么?