Thinking in Java之静态数据初始化顺序

在Java中,初始化的顺序是先静态对象(如果他们尚未因前面的对象创建过程而被初始化),而后是“非静态”对象。

在程序中,bowl3是非静态对象,所以在输出的时候是先打印了Bowl(4)和Bowl(5),后打印了Bowl(3).


源程序:

/**************************************************************              
* 版 本 号:v1.0                   
* 程序来源:《Thinking in Java》 page:186(中文95-96页) 
* 题目描述:静态数据的初始化
* 问题分析:初始化的顺序是先静态对象(如果他们尚未因前面的对象创建过程而被初始化),而后是
*			“非静态”对象。在程序中,bowl3是非静态对象,所以在输出的时候是先打印了Bowl(4)和Bowl(5),
*			后打印了Bowl(3).
* 输入描述:无 
* 程序输出:Bow(1)
*			Bow(2)
*			Table()
*			f1(1)
*			Bow(4)
*			Bow(5)
*			Bow(3)
*			Cupboard()
*			f1(2)
*			Creating new Cupboard() in main
*			Bowl(3)
*			Cupboard()
*			f1(2)
*			Creating new Cupboard() in main
*			Bowl(3)
*			Cupboard()
*			f1(2)
*			f2(1)
*			f3(1)
*完成日期: 2016年 07月 19日
***************************************************************/ 
class Bowl{
	Bowl(int marker){
		System.out.println("Bowl(" + marker + ")");
	}
	void f1(int marker){
		System.out.println("f1(" + marker + ")");
	}
}
class Table{
	static Bowl bowl1 = new Bowl(1);
	Table(){
		System.out.println("Table()");
		bowl2.f1(1);
	}
	void f2(int marker){
		System.out.println("f2(" + marker + ")");
	}
	static Bowl bowl2 = new Bowl(2);
}
class Cupboard{
	Bowl bowl3 = new Bowl(3);  			//注意,bowl3是非静态的对象
	/*初始化顺序是先静态对象,而后“非静态”对象。所以输出的时候先打印Bowl(4)和Bowl(5)
	后打印Bowl(3)*/
	static Bowl bowl4 = new Bowl(4);   
	Cupboard(){
		System.out.println("Cupboard()");
		bowl4.f1(2);
	}
	void f3(int marker){
		System.out.println("f3(" + marker + ")");

	}
	static Bowl bowl5 = new Bowl(5);
}
public class example_186{
	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();
		table.f2(1);
		cupboard.f3(1);
	}
	/*这两个是静态的,所以先声明Table类,Table类中,Bowl类的bowl1对象又先被定义,所以先打印输出Bowl(1)和Bowl(2),
	然后打印Table类的构造函数和方法。*/
	static Table table = new  Table();					
	static Cupboard cupboard = new Cupboard();
}

程序输出结果:




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值