Java類中靜態代碼塊、構造代碼塊、構造函數快速理解

 

package com.test;

public class Son extends Father{
	static{
		System.out.println("Son:靜態代碼塊");
	}
	{
		System.out.println("Son:構造代碼塊");
	}
	public Son(){
		System.out.println("Son:構造函數");
	}
	public Son(String s){
		super(s);
		System.out.println("Son:構造函數" + s);
	}
	public static void main(String[] args) {
		System.out.println();
		Father fa = new Son("Son");
	}
}

 

package com.test;

public class Father {
	static{
		System.out.println("Father:靜態代碼塊");
	}
	{
		System.out.println("Father:構造代碼塊");
	}
	public Father(){
		System.out.println("Father:構造函數");
	}
	public Father(String s){
		System.out.println("Father:構造函數" + s);
	}
}

 

執行結果:
Father:靜態代碼塊
Son:靜態代碼塊

Father:構造代碼塊
Father:構造函數Son
Son:構造代碼塊
Son:構造函數Son

 

得出結論:

 

1、執行順序:靜態代碼塊>構造代碼塊>構造函數。

 

2、靜態代碼塊隨類的聲明而執行,而構造代碼塊和構造函數在一個類實例化後執行,其中構造代碼塊又優先於構造函數代碼塊。

3、子類沒有用super(s)時,默認調用的是父類的無參構造函數塊。

 

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