站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题JAVA中静态初始化问题,很迷糊,请兄弟们指点!

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);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
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 marker) {
System.out.println("f3(" + marker + ")");
}
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(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)


很明显 程序执行的时候 先进的是 public class StaticInitialization {} 在这个class里面你声明了 2个静态变量 程序会 按顺序执行这个 静态变量 ,首先执行static Table t2=new Table(); 程序会去找 Table()这个构造函数 Table 里面有static Bowl b1 = new Bowl(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)

具体后面怎么执行 你自己慢慢调试下吧 我不多说了






加载主类,执行mian函数


在加载主类或用new创建类时,按如下顺序:

1、先执行类变量初始化
2、再执行实例变量初始化
3、然后执行构造函数



加载主类,执行mian函数


在加载主类或用new创建类时,按如下顺序:

1、先执行类变量初始化(类变量只初始化一次)
2、再执行实例变量初始化
3、然后执行构造函数


补充下楼上的
在类初始化时:
1.static变量(全局只初始化一次)
2.类变量
3.再执行实例变量初始化
4.然后执行构造函数


刚才查了下..类变量指的就是static....Sorry!


↑返回目录
前一篇: 接口里可以声明变量吗?
后一篇: 一个map 问题.大虾来看下