代碼塊
在Java中,使用{}括起來的代碼被稱為代碼塊,
分類
根據其位置和宣告的不同,可以分為
1.區域代碼塊:區域位置,用于限定變數的生命周期,
2.構造代碼塊:在類中的成員位置,用{}括起來的代碼,每次呼叫構造方法執行前,都會先執行構造代碼塊,作用:可以把多個構造方法中的共同代碼放到一起,對物件進行初始化,
3.靜態代碼塊:在類中的成員位置,用{}括起來的代碼,只不過它用static修飾了,作用:一般是對類進行初始化,
總結結論
單個類中: 靜態代碼塊(靜態成員變數) -> main方法 -> 構造代碼塊(成員變數) -> 構造方法
靜態代碼塊:只執行一次
構造代碼塊:在每一次創建物件時執行
涉及父類和子類的初始化程序:
a.初始化父類中的靜態成員變數和靜態代碼塊(按次序)
b.初始化子類中的靜態成員變數和靜態代碼塊(按次序)
c.初始化父類的普通成員變數和構造代碼塊(按次序),再執行父類的構造方法(注意父類構造方法中的子類方法覆寫)
d.初始化子類的普通成員變數和構造代碼塊(按次序),再執行子類的構造方法
看程式寫結果
class Test { static { System.out.println("Test 靜態代碼塊"); } { System.out.println("Test 構造代碼塊"); } public Test() { System.out.println("Test 構造方法"); } } public class TestDemo { static { System.out.println("TestDemo 靜態代碼塊"); } { System.out.println("TestDemo 構造代碼塊"); } public static void main(String[] args) { System.out.println("TestDemo main方法"); Test t1 = new Test(); Test t2 = new Test(); } }
其運行結果是:
TestDemo 靜態代碼塊
TestDemo main方法
Test 靜態代碼塊
Test 構造代碼塊
Test 構造方法
Test 構造代碼塊
Test 構造方法
public class Test extends MyClass{ { System.out.println("Test 構造代碼塊"); } Person person = new Person("Test"); static { System.out.println("Test 靜態代碼塊"); } public Test() { System.out.println("Test 構造方法"); } public static void main(String[] args) { new Test(); } } class Person { static { System.out.println("Person 靜態代碼塊"); } { System.out.println("Person 構造代碼塊"); } public Person(String str) { System.out.println("Person 構造方法,引數是" + str); } } class MyClass { static Person person = new Person("MyClass"); static { System.out.println("MyClass 靜態代碼塊"); } { System.out.println("MyClass 構造代碼塊"); } public MyClass() { System.out.println("MyClass 構造方法"); } }
其運行結果是:
Person 靜態代碼塊
Person 構造代碼塊
Person 構造方法,引數是MyClass
MyClass 靜態代碼塊
Test 靜態代碼塊
MyClass 構造代碼塊
MyClass 構造方法
Test 構造代碼塊
Person 構造代碼塊
Person 構造方法,引數是Test
Test 構造方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104939.html
標籤:Java
