java 初始化塊

java中三種初始化數據域的方法:

1、在構造器中設置值

   public class Student{
     private String name;
     private int age;
     public Student(){
           this.name = "張梅";
           this.age = 15;
    }
}

2、在聲明中賦值


 

public class Student{

private String name = "張梅";

private int age = 15;

}

3、初始化塊

      在一個類的聲明中,可以包含多個代碼塊,只要構造類的對象,這些塊就會被執行。

      但是這種機制不是必須的,也不常見。通常會直接將初始化代碼放在構造器中。

   舉例如下:

   (1)創建包含初始化塊的類

package hhhh;

public class Employee3 {
	
	static{
		System.out.println("這是靜態初始化塊1");
		Employee3 as = new Employee3();
	}

	private static int nextId = 90;
	private int id;
	private String name = "雪琪";
	private double salary;
	private static Employee3 as32 = new Employee3();
	
	
	{
		System.out.println("這是非靜態初始化塊" + nextId + "==name:" + name);
		id = nextId;
		nextId++;
	}
	
	static{
		System.out.println("這是靜態初始化塊2" + nextId);
		
	}
	public Employee3(String n ,double s) {
		name = n;
		salary = s;
	}
	public Employee3() {
		
		System.out.println("這是構造方法");
		name = "";
		salary = 0;
	}
	
}

  (2)創建測試類

package hhhh;


public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Employee3 a = new Employee3();

		
	}

}

(3)查看運行結果

(4)結果分析

需要注意的是:

1、靜態初始化塊只執行一次

2、靜態初始化塊執行完後才執行非靜態初始化塊

3、非靜態初始化塊執行完後才執行構造方法

1) 當Test4類中實例化一個對象a之後就開始依次運行初始化塊。

所以先執行

得到第一條執行結果

 

2)然後執行

因爲靜態初始化塊只執行一次,所以這裏得到結果

3)依次執行下面這兩條

首先得到了nextId=90,然後執行創建對象as32時又依次執行了非靜態方法和構造方法:

4)接下來執行靜態初始化塊2(因爲靜態初始化塊執行完才執行非靜態初始化塊)

得到結果:

5)這時,靜態初始化塊已經執行完了,該執行非靜態初始化塊了:

得到結果:

6)最終執行到1)的構造方法:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章