1. 程式人生 > >Java基礎知識回顧之程式碼塊

Java基礎知識回顧之程式碼塊

程式碼塊

我們主要觀察普通程式碼塊、構造塊、靜態塊的主要作用。

在程式編寫之中可以直接使用 {} 定義一段語句,那麼根據此部分定義的位置以及關鍵字的不同可以分為以下幾種:

  • 普通程式碼塊
  • 構造塊
  • 靜態塊

不過,我們在寫程式的時候,儘量不去使用程式碼塊。

普通程式碼塊

如果說一個程式碼塊寫在了方法裡,那麼就稱它了普通程式碼塊。

程式碼例項

下面說的變數,只是相對關係。

public class TestDemo {

	public static void main(String[] args) {
		{// 普通程式碼塊
			int
num = 10; //區域性變數 System.out.println(num); } int num = 100; // 相對的上面的區域性變數,為全域性變數 System.out.println(num); } }

實際上普通程式碼塊就是為了防止在方法裡面編寫的程式碼過多時,有可能產生的變數重名。對一個方法的程式碼進行區域性分割。

構造塊

如果說現在將一個程式碼塊寫在了一個類裡面,那麼我們就稱為構造塊。

程式碼例項

class Book{
	public Book() {	// 構造方法
		System.out.println("【A】 Book 類的構造方法"
); } {// 將程式碼塊寫在了類裡面 System.out.println("【B】 Book 類的構造塊"); } } public class TestDemo { public static void main(String[] args) { new Book(); } }

控制檯輸出

【B】 Book 類的構造塊
【A】 Book 類的構造方法

此時例項化 Book 類物件時,雖然執行的是 Book 類的構造方法,但是構造塊裡面的程式碼也執行了。並且會發現構造塊的程式碼是優先於 構造方法執行。

程式碼例項

class Book{
	public
Book() { // 構造方法 System.out.println("【A】 Book 類的構造方法"); } {// 將程式碼塊寫在了類裡面 System.out.println("【B】 Book 類的構造塊"); } } public class TestDemo { public static void main(String[] args) { new Book(); new Book(); new Book(); } }

控制檯輸出

【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法

從控制檯的輸出可以看到,每當我們例項化一個 Book 類時,我們的構造塊都會被執行一次。

靜態塊

如果我們的程式碼塊使用了 static 進行定義的話,那麼就被稱為靜態塊。我們分為兩種情況來看。

在非主類中使用

程式碼例項

class Book{
	public Book() {	// 構造方法
		System.out.println("【A】 Book 類的構造方法");
	}
	
	{// 將程式碼塊寫在了類裡面
		System.out.println("【B】 Book 類的構造塊");
	}
	
	static {// 將程式碼塊寫在了類裡面
		System.out.println("【C】 Book 類的構造塊");
	}
}

public class TestDemo {

	public static void main(String[] args) {
		new Book();
		new Book();
		new Book();
	}
}

控制檯輸出

【C】 Book 類的構造塊
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法

從上面我們可以看到,靜態塊只是執行了一次,並且是優先於構造方法和構造塊。也就是說,不管例項化多少個物件,靜態塊只執行一次。

在主類中使用

程式碼例項

public class TestDemo {
	
	static {
		System.out.println("**********");
	}

	public static void main(String[] args) {
		System.out.println("main()");
	}
}

控制檯輸出

**********
main()

從控制檯的輸出,我們就可以知道,static 靜態塊 是優先於 main 方法執行的