Java中static变量的初始化顺序


Java中static变量的初始化顺序


package test;


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)

分析::进入main时,发现两个static变量,对于第一个Table型,进入Table类中,发现又有两个static的Bowl类,所以刚开始的顺序为Bowl(1)
Bowl(2) 然后就是Table的构造函数,输出Table()  f(1) 接下来是static的cupboard类,进入cupboard类,发现有两个static的bowl类,所以顺序为Bowl(4)
Bowl(5) 对于bowl3,由于它不是static的,所以它的顺序靠后,进入cupboard的构造函数,输出Cupboard() f(2) 

接下来就是一个输出语句   又来一个new cupboard,不过它是一般形式,所以进入cupboard类,输出bowl(3),这是因为它是一般类型的,不是static,对于Static类型的,它只会初始化一次。接下来输出Cupboard()f(2) 输出一个输出语句。又来一个new cupboard,一般形式,后面的就好理解了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值