天天看點

Java中執行個體初始化是什麼? What is Instance Initializer in 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)執行無法用執行個體變量初始化來的計算。

當然,這樣的代碼可以寫在構造函數裡。但是,如果一個類有多個構造函數,你就必須在每個構造函數裡重複這段代碼。

用執行個體初始化,你可以隻編寫一次代碼,無論什麼構造函數被用來建立對象,都将會被執行。(我想這隻是一個概念,它沒有經常被使用。)

還有一種執行個體初始化很有用的情況是是匿名内部類,不能聲明任何構造函數。(這會是放置日志功能的一個好地方呢?)

相關文章:Object initialization in Java

原文:

What is Instance Initializer in Java?