構造器,構造代碼塊,靜態代碼塊的執行順序

題目一:LeafTest.java
總體順序是
在這裏插入圖片描述

package com.atguigu.exer05;
 
//總結:由父及子,靜態先行
class Root{
	static{
		System.out.println("Root的靜態初始化塊");
	}
	{
		System.out.println("Root的普通初始化塊");
	}
	public Root(){
		super();
		System.out.println("Root的無參數的構造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的靜態初始化塊");
	}
	{
		System.out.println("Mid的普通初始化塊");
	}
	public Mid(){
		super();
		System.out.println("Mid的無參數的構造器");
	}
	public Mid(String msg){
		//通過this調用同一類中重載的構造器
		this();
		System.out.println("Mid的帶參數構造器,其參數值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的靜態初始化塊");
	}
	{
		System.out.println("Leaf的普通初始化塊");
	}	
	public Leaf(){
		//通過super調用父類中有一個字符串參數的構造器
		super("尚硅谷");
		System.out.println("Leaf的構造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf(); 
		System.out.println();
		new Leaf();
	}
}


運行結果;

Root的靜態初始化塊
Mid的靜態初始化塊
Leaf的靜態初始化塊
Root的普通初始化塊
Root的無參數的構造器
Mid的普通初始化塊
Mid的無參數的構造器
Mid的帶參數構造器,其參數值:尚硅谷
Leaf的普通初始化塊
Leaf的構造器

Root的普通初始化塊
Root的無參數的構造器
Mid的普通初始化塊
Mid的無參數的構造器
Mid的帶參數構造器,其參數值:尚硅谷
Leaf的普通初始化塊
Leaf的構造器

總結:
靜態代碼塊,對象實例化就執行,無論new多少個對象,僅執行一次
構造代碼塊,對象一實例化就執行,沒實例化一次執行一次。
構造器:與類同名且沒有返回值,用來初始化類屬性。

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