1. 程式人生 > >Java中例項初始化是什麼?

Java中例項初始化是什麼?

在這篇文章中,首先用一個例子來說明什麼是例項變數的初始化,例項初始化和靜態初始化。然後再解釋例項初始化是怎樣執行的。
1.執行順序

看看下面的類,你知道哪一個最先被執行?

public class Foo {
 
	//instance variable initializer
	String s = "abc";
 
	//constructor
	public Foo() {
		System.out.println("constructor called");
	}
 
	//static initializer
	static {
		System.out.println("static initializer called");
	}
 
	//instance initializer
	{
		System.out.println("instance initializer called");
	}
 
	public static void main(String[] args) {
		new Foo();
		new Foo();
	}
}
輸出:

static initializer called
instance initializer called
constructor called
instance initializer called
constructor called
2.Java例項初始化是怎樣執行的?
上面的例項初始化包含一個print語句。要了解它是如何執行的,我們可以把它作為一個變數賦值語句(例如b = 0),那麼這將不難理解。
而不是

int b = 0
,你可以寫成
int b;
b = 0;

3.例項初始化什麼時候有用?
使用例項初始化是罕見的,但它仍然可以成為有用的替代例項變數初始化的一個選擇,如果:
(1)初始化程式碼必須處理異常;
(2)執行無法用例項變數初始化來的計算。
當然,這樣的程式碼可以寫在建構函式裡。但是,如果一個類有多個建構函式,你就必須在每個建構函式裡重複這段程式碼。
用例項初始化,你可以只編寫一次程式碼,無論什麼建構函式被用來建立物件,都將會被執行。(我想這只是一個概念,它沒有經常被使用。)
還有一種例項初始化很有用的情況是是匿名內部類,不能宣告任何建構函式。(這會是放置日誌功能的一個好地方呢?)

原文: