關於java的static靜態代碼塊、靜態成員變量和對象初始化先後問題

靜態成員變量的初始化早於靜態代碼塊;
靜態代碼塊是指的類的初始化操作,初始化早於對象的創建;

package com.company.fourthchapter;

public class TestStaticInitBlock {

	int id;       
    String name; 
    String pwd;  
    static String company="原始值"; 
    
    static {
    	System.out.println("執行類的初始化");
    	printCompany();
    	company = "這個名稱是在分配對象空間之前(即:new 之前)";
    	printCompany();
    }
    
    public TestStaticInitBlock(String company) {
    	System.out.println("執行構造方法進行對象的初始化");
    	printCompany();
    	this.company = company;
    	printCompany();
    }
    
    
    public static void printCompany() {
    	System.out.println(company);
    };
    
    public static void main(String[] args) {
    	TestStaticInitBlock test = new TestStaticInitBlock("這是創建對象的時候賦值的名字,可以在這裏打一個斷點試一下");
    }
    
    
}

//the following is result;輸出結果如下

執行類的初始化
原始值
這個名稱是在分配對象空間之前(即:new 之前) //PS:當斷點還沒有執行的時候,這句話已經輸出了
執行構造方法進行對象的初始化
這個名稱是在分配對象空間之前(即:new 之前)
這是創建對象的時候賦值的名字,可以在這裏打一個斷點試一下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章