執行順序是:先執行“靜態程式碼區塊”,再執行“建構程式碼區塊”,最後執行“建構程式碼區塊”。靜態程式碼區塊是類別層級的,而建構程式碼區塊和建構方法是實例層級的,因而靜態程式碼區塊先執行;又因建構程式碼區塊是獨立的,必須依附載體才能運行,因而建構程式碼區塊需放到構造方法前。
本教學操作環境:windows7系統、java8版、DELL G3電腦。
建構程式碼區塊、靜態程式碼區塊與建構方法是類別中三種不同的程式碼區塊,那麼他們到底有什麼差別呢?
靜態程式碼區塊:用staitc聲明,jvm載入類別時執行,僅執行一次
建構程式碼區塊:類別中直接用{}定義,每一次建立物件時執行。
執行順序優先權:靜態區塊,main(),建構區塊,建構方法。
class A { //构造代码块 { System.out.println("构造代码块A"); } //静态代码块 static { System.out.println("静态代码块A"); } //构造方法 public A() { System.out.println("构造方法A"); } }
為了弄清楚三者的執行順序,我們對類別 A 進行實例化,分別進行單一實例和多個實例的測試。
class Demo { public static void main(String[] args) { new A(); } }
class Demo { public static void main(String[] args) { new A(); new A(); new A(); } }
class B extends A { //构造代码块 { System.out.println("构造代码块B"); } //静态代码块 static { System.out.println("静态代码块B"); } //构造方法 public B() { System.out.println("构造方法B"); } } class Demo { public static void main(String[] args) { new B(); } }
# 1、在創建物件的過程中,三者的執行順序是:靜態程式碼區塊 --> 建構程式碼區塊 --> 建構方法;
1.靜態程式碼區塊:是在類別的載入過程的第三步驟初始化的時候進行的,主要目的是給類別變數賦予初始值。
2.建構程式碼區塊:是獨立的,必須依附載體才能運行,Java會把構造程式碼區塊放到每個建構方法的前面,用於實例化一些共有的實例變量,減少程式碼量。
3.建構方法:用於實例化變數。1是類別層級的,2、3是實例層級的,自然1要優先23。
在就明白一點:對子類得主動使用會導致對其父類得主動使用,所以儘管實例化的是子類,但也會導致父類的初始化和實例化,且優於子類別執行。
2、每創建一個對象,建構程式碼區塊和建構方法就會執行一次;而不管創建多少個對象,靜態程式碼區塊僅在創建第一個物件時執行一次;
3、建立子類別物件時,子類別的靜態程式碼區塊在父類別的靜態程式碼區塊後面執行,但優先於父類別的建構程式碼區塊和建構方法;
4、建立子類別物件時,子類別的建構程式碼區塊在父類別的建構方法後執行。
相關影片教學推薦:Java影片教學
#以上是靜態程式碼區塊、建構程式碼區塊、建構方法的執行順序是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!