1. 程式人生 > >JAVA方法載入順序

JAVA方法載入順序

類載入機制:
類載入器的任務就是根據一個類的全限定名來讀取次類的二進位制位元組流到JVM轉換成 java.lang,class類
類載入過程:載入、驗證、準備、解析和初始化。

雙親委託模型(確保載入的唯一性):當類收到載入請求時,它首先不會嘗試載入這個類,
而是把請求委託給父類載入器執行,每個類都是如此(如果還有父類繼續上交),如果父
類載入不了,子類載入才會進行載入。

關於載入、執行順序
A a=new B() 呼叫順序
先載入父類靜態程式碼區(類方法)->子類靜態程式碼區(類方法)->父類非靜態程式碼區(構造塊)->父類構造方法–>子類非靜態程式碼區(構造塊)->子類構造方法

public class B extends A{

	
	public B()
	{
		System.out.println("這是B類的構造方法");
	}
	
	 static 
	{
		System.out.println("這是B類的靜態程式碼區(類方法)");
	}
	
	 public static void staticB()
	 {
		 System.out.println("這是B類的靜態方法");
	 }
	{
		
		System.out.println("這是B類的構造塊");
	}
	
	public static void main(String[] args) {
		
		A a=new B();
	}
	
}


class A {

	public A()
	{
		System.out.println("這是A類的構造方法");
	}
	static  
	{
		
		System.out.println("這是A類的靜態程式碼區(類方法)");
	}
	
	public static void staticA()
	{
		System.out.println("這是A類的靜態方法");
	}
	{
		System.out.println("這是A類的構造塊");
	}
}

執行結果:
在這裡插入圖片描述
靜態方法與靜態程式碼區(類方法)的區別
靜態程式碼塊是自動執行的; 靜態方法是被呼叫的時候才執行的
靜態程式碼塊在類載入時呼叫,並且只調用一次。

類中的載入順序:
靜態塊-》main()->構造塊(直接用{}定義 建立物件時呼叫)->建構函式·

由此拓展:
靜態程式碼區不依賴於 new,即 User u =null;
User.get() //依舊可以使用其靜態方法