1. 程式人生 > >Java 子類物件初始化過程

Java 子類物件初始化過程

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

一個經典的Java的面試題

  • 靜態程式碼塊:顧名思義就是存放在靜態程式碼區的程式碼,在類初始化時放入靜態程式碼區,只執行一次
  • 普通程式碼塊:隨著物件例項的建立而建立
  • 構造程式碼區:物件例項建立時建立

執行順序:靜態代塊 -> 普通程式碼塊 -> 構造程式碼塊

簡單類例項化過程:靜態程式碼區 -> 靜態屬性初始化 -> 動態屬性初始化 -> 普通程式碼區 -> 建構函式

作用:一般完成一些類例項建立或類載入前的初始化工作

package com.zhiwei.basic;

public class FatherAndSon {
       
	public static void main(String[] args) {
		new Son();
	}

    private static class Father{
	
	public String name;
   
	//靜態程式碼塊
	static{
		System.out.println("Father Static Code Area........");
	}
	
	//普通程式碼塊
    {
    	name="father"; //初始化類屬性
	    System.out.println("Father public Code Area........");
	}
    
    //構造程式碼塊
    public Father(){
    	System.out.println("Father construct Code Area........");
    }
}

private static class Son extends Father{
	
	//靜態程式碼塊
		static{
			System.err.println("Son Static Code Area........");
		}
		
		//普通程式碼塊
	    {
	    	name="Son"; //初始化類屬性
		    System.err.println("Son public Code Area........");
		}
	    
	    //構造程式碼塊
	    public Son(){
	    	System.err.println("Son construct Code Area........");
	    }
}
}

------------------------結果-------------------

Son Static Code Area........
Father Static Code Area........
Son public Code Area........
Son construct Code Area........
Father public Code Area........
Father construct Code Area........

分析: 父類靜態程式碼塊 -> 子類靜態程式碼塊 -> 父類普通程式碼塊 -> 父類構造程式碼塊(非靜態程式碼塊) -> 子類普通程式碼塊 -> 子