java繼承中的初始化順序


初始化順序:父類的靜態變量-->父類的靜態代碼塊-->子類的靜態變量-->子類的靜態代碼快-->父類的非靜態變量(父類的非靜態代碼塊)-->父類的構造函數-->子類的非靜態變量(子類的非靜態代碼塊)-->子類的構造函數

值得注意的是:父類的非靜態變量(父類的非靜態代碼塊)是同一級的,看哪個部分寫在類的最前面誰就先被執行,子類的非靜態變量(子類的非靜態代碼塊)也是一樣。###

驗證代碼:

package com.hts.test;


public class Test {
	public static void main(String[] args) {
		Child c=new Child();
	}
}
class Parent {
	public static PrintMessage a=new PrintMessage("父類靜態成員被初始化");
	private PrintMessage b=new PrintMessage("父類非靜態成員被初始化");	
	static{
		System.out.println("父類的靜態代碼塊被執行");
	}
	{
		System.out.println("父類的非靜態代碼塊被執行");
	}
	public Parent(){
		System.out.println("父類的構造方法被執行");
	}	
}

class Child extends Parent{
	public static PrintMessage a1=new PrintMessage("子類靜態成員被初始化");
	private PrintMessage b1=new PrintMessage("子類非靜態成員被初始化");	
	
	static {
		System.out.println("子類的靜態代碼塊被執行");
	}
	{
		System.out.println("子類的非靜態代碼塊被執行");
	}
	public Child(){
		System.out.println("子類的構造函數被執行");
	}
}

class PrintMessage{
	public PrintMessage(String mes){
		System.out.println(mes);
	}
}

輸出結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM