【Java】代碼塊


在Java中,字段的初始化方式有三種:

  1. 就地初始化
  2. 使用構造方法初始化
  3. 使用代碼塊初始化

前兩種方式非常簡單,接下來介紹一下工程中常用的第三種方式:使用代碼塊初始化


什麼是代碼塊?

使用{}定義的一段代碼.
根據代碼塊定義的位置以及關鍵字,又可分爲以下四種:

  1. 普通代碼塊
  2. 構造塊
  3. 靜態塊
  4. 同步代碼塊(涉及多線程知識後面再講解)

普通代碼塊

普通代碼塊:定義在方法中的代碼塊。

public class Main{
	public static void main(String[] args) {
		{ 	//普通方法塊
			int x = 10 ;
			System.out.println("x1 = " +x);
		}
		int x = 100 ;
		System.out.println("x2 = " +x);
	}
}

// 執行結果
x1 = 10
x2 = 100 

構造代碼塊

定義:定義在類中的代碼塊(不加修飾符)。也叫:實例代碼塊、構造塊。

構造代碼塊一般用於初始化實例成員變量,類似於C++中的初始化成員列表。

class Person{
	private String name;	//實例成員變量
	private int age;
	private String sex;
	
	public Person() {
		System.out.println("I am Person init()!");
	}
	
	{ 		//實例代碼塊
		this.name = "giturtle";
		this.age = 21;
		this.sex = "man";
		System.out.println("I am instance init()!");
	}
	
	public void show(){
		System.out.println("name: "+name
			+" age: "+age
			+" sex: "+sex
		);
	}
}

public class Main {
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.show();
	}
}

// 運行結果
I am instance init()!
I am Person init()!
name: giturtle age: 21 sex: man 

從執行結果可以看到:實例代碼塊優先於構造函數執行。

靜態代碼塊

定義:使用static定義的代碼塊。一般用於初始化靜態成員屬性。

class Person{
	private String name;	//實例成員變量
	private int age;
	private String sex;
	private static int count = 0;	//靜態成員變量 由類共享數據、方法區

	public Person(){
		System.out.println("I am Person init()!");
	}

	{		//實例代碼塊
		this.name = "giturtle";
		this.age = 21;
		this.sex = "man";
		System.out.println("I am instance init()!");
	}

	static { 		//靜態代碼塊
		count = 10;	//只能訪問靜態數據成員
		System.out.println("I am static init()!");
	}
}

public class Main {
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();	//靜態代碼塊不會執行
									//只會在最開始執行一次
	}
} 

// 運行結果
I am static init()!
I am instance init()!
I am Person init()!
I am instance init()!
I am Person init()!

注:

  • 靜態代碼塊不管生成多少個對象,其只會執行一次,且是最先執行的。
  • 靜態代碼塊執行完畢後, 實例代碼塊(構造塊)執行,再然後是構造函數執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章