欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java類的初始化順序的實現(xiàn)

 更新時間:2023年12月06日 14:40:05   作者:無問287  
類的初始化過程是在類加載階段完成的,包括加載、驗證、準備、解析和初始化等步驟,本文主要介紹了Java類的初始化順序的實現(xiàn),感興趣的可以了解一下

類初始化順序遵循以下三個原則(優(yōu)先級依次遞減)

1、靜態(tài)對象(變量)優(yōu)先于非靜態(tài)對象(變量)初始化,其中靜態(tài)對象(變量)只初始化一次,而非靜態(tài)對象(變量)可能會初始化多次;

2、父類優(yōu)先于子類初始化;

3、成員變量按照定義先后順序進行初始化;

例如:靜態(tài)變量、非靜態(tài)變量、靜態(tài)代碼塊、非靜態(tài)代碼塊、構(gòu)造函數(shù)、父類、子類等。

他們的初始化順序是:父類靜態(tài)變量 > 父類靜態(tài)代碼塊 > 子類靜態(tài)變量 > 子類靜態(tài)代碼塊 > 父類非靜態(tài)變量 > 父類非靜態(tài)代碼塊 > 父類構(gòu)造函數(shù) > 子類非靜態(tài)變量 > 子類非靜態(tài)代碼塊 > 子類構(gòu)造函數(shù)。 

1.對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順序是?

public class Test1 {
	// 靜態(tài)變量
	public static String staticField = "靜態(tài)變量";
	// 變量
	public String field = "變量";
	// 靜態(tài)初始化塊
	static {
	  System.out.println(staticField);
	  System.out.println("靜態(tài)初始化塊");
	}
	// 初始化塊
	{
	  System.out.println(field);
	  System.out.println("初始化塊");
	}
	// 構(gòu)造器
	public Test1() {
	 System.out.println("構(gòu)造器");
	}
	public static void main(String[] args) {
	 new Test1();
	}
}

執(zhí)行結(jié)果如下:

2.在繼承場景下,對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順是?

class Parent { 
	 // 靜態(tài)變量
	 public static String p_StaticField = "父類--靜態(tài)變量";
	 // 變量
	 public String p_Field = "父類--變量";
	 // 靜態(tài)初始化塊
	 static {
	   System.out.println(p_StaticField);
	   System.out.println("父類--靜態(tài)初始化塊");
	 }
	 // 初始化塊
	 {
	   System.out.println(p_Field);
	   System.out.println("父類--初始化塊");
	 }
	 // 構(gòu)造器
	 public Parent() {
	   System.out.println("父類--構(gòu)造器");
	 }
}
public class Test2 extends Parent {
	 // 靜態(tài)變量
	 public static String s_StaticField = "子類--靜態(tài)變量";
	 // 變量
	 public String s_Field = "子類--變量";
	 // 靜態(tài)初始化塊
	 static {
	   System.out.println(s_StaticField);
	   System.out.println("子類--靜態(tài)初始化塊");
	 }
	 // 初始化塊
	 {
	   System.out.println(s_Field);
	   System.out.println("子類--初始化塊");
	 }
	 // 構(gòu)造器
	 public Test2() {
	   System.out.println("子類--構(gòu)造器");
	 }
	 // 程序入口
	 public static void main(String[] args) {
	   new Test2();
	 }
}

 執(zhí)行結(jié)果如下:

3.靜態(tài)變量和靜態(tài)初始化塊之間、變量和初始化塊之間的先后順序又是怎樣呢? 

public class Test3 {
// 靜態(tài)變量
public static TestA a = new TestA();
// 靜態(tài)初始化塊
static {
   System.out.println("靜態(tài)初始化塊");
}
// 靜態(tài)變量
public static TestB b = new TestB();
	public static void main(String[] args) {
		new Test3();
	}
}
class TestA {
	public TestA() {
		System.out.println("Test--A");
	}
}
class TestB {
	public TestB() {
		System.out.println("Test--B");
	}
}

執(zhí)行結(jié)果如下:

到此這篇關(guān)于Java類的初始化順序的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java類初始化順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論