`

类的初始化

阅读更多

在类的内部,成员变量定义的先后顺序决定了初始化的顺序,其中,先初始化静态变量(或者对象),再初始化非静态变量(或者对象)。


在new 出一个对象时,必定是先初始化成员变量,成员变量包括基本数据类型和引用对象,然后再执行构造器。


静态初始化只在Class对象首次加载的时候进行一次。

 

下面的程序说明了这一点(故意打乱了编码的顺序,实际开发中,还得要按正常的编码顺序来写)

package com.thinkingInJava;

public class StaticInitialzation {

	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		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);
	}

}


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);
}


 输出:

Bowl1
Bowl2
Table()
f1(1)
Bowl4
Bowl5
Bowl3
Cupboard()
f1(2)
Creating new Cupboard in main
Bowl3
Cupboard()
f1(2)
Creating new Cupboard in main
Bowl3
Cupboard()
f1(2)
f2(1)
f3(1)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics