《Java编程思想》(笔记5)-- 初始化与清理

是决定花一段连续的时间把《Java编程思想》看一遍,看书怎么能不做笔记呢,明明知道自己有些地方看完肯定会忘掉的,所以想把每章的笔记重点放在博客上,与大家共享!

第五章 初始化与清理

1.初始化顺序

在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布在方法定义之间,他们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
静态对象的初始化早于“非静态对象”。
静态数据只初始化一次,也就是说只在第一次访问静态数据,才会被初始化。静态初始化只在Class对象首次加载时进行一次。

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);
	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 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();
		table.f2(1);
		cupboard.f3(1);
	}
	//最先执行
	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
}
/*
//看看和你自己写的是不是一致,确保理解上面的准则
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(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)
*/
	
}
祝进步

猜你喜欢

转载自blog.csdn.net/zhaohancsdn/article/details/88655628