執行順序是:先執行「靜態程式碼塊」,再執行「構造程式碼塊」,最後執行「構造程式碼塊」。靜態程式碼塊是類級別的,而構造程式碼塊和構造方法是範例級別的,因而靜態程式碼塊先執行;又因構造程式碼塊是獨立的,必須依附載體才能執行,因而構造程式碼塊需放到構造方法前。
本教學操作環境: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視訊教學
以上就是靜態程式碼塊、構造程式碼塊、構造方法的執行順序是什麼的詳細內容,更多請關注TW511.COM其它相關文章!