代码如下:class Bowl {
Bowl(int er) {
System.out.println("Bowl(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
}class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int er) {
System.out.println("f2(" + er + ")");
}
static Bowl b2 = new Bowl(2);
}class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int er) {
System.out.println("f3(" + er + ")");
}
static Bowl b5 = new Bowl(5);
}public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2=new Table();
static Cupboard t3=new Cupboard();
}能告诉我,它的执行过程吗?详细点为佳!希望兄弟们不吝啬赐教!
Bowl(int er) {
System.out.println("Bowl(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
}class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int er) {
System.out.println("f2(" + er + ")");
}
static Bowl b2 = new Bowl(2);
}class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int er) {
System.out.println("f3(" + er + ")");
}
static Bowl b5 = new Bowl(5);
}public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2=new Table();
static Cupboard t3=new Cupboard();
}能告诉我,它的执行过程吗?详细点为佳!希望兄弟们不吝啬赐教!
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)
程序同样去找 Bowl()的构造函数 class Bowl {} 所以 程序 第一句话打印了 Bowl(1),静态变量先执行 ,所以回到Table()中 ,程序先运行了static Bowl b2 = new Bowl(2); 打印出Bowl(2),在回到Table()中 执行Table() 这个构造,打印Table() 遇到b2.f(1)调用 class Bowl {} 中的方法 所以打印f(1)具体后面怎么执行 你自己慢慢调试下吧 我不多说了
在加载主类或用new创建类时,按如下顺序: 1、先执行类变量初始化
2、再执行实例变量初始化
3、然后执行构造函数
在加载主类或用new创建类时,按如下顺序: 1、先执行类变量初始化(类变量只初始化一次)
2、再执行实例变量初始化
3、然后执行构造函数
在类初始化时:
1.static变量(全局只初始化一次)
2.类变量
3.再执行实例变量初始化
4.然后执行构造函数