靜態程式碼塊、構造程式碼塊、構造方法的執行順序是什麼

2022-01-25 13:00:48

執行順序是:先執行「靜態程式碼塊」,再執行「構造程式碼塊」,最後執行「構造程式碼塊」。靜態程式碼塊是類級別的,而構造程式碼塊和構造方法是範例級別的,因而靜態程式碼塊先執行;又因構造程式碼塊是獨立的,必須依附載體才能執行,因而構造程式碼塊需放到構造方法前。

本教學操作環境: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 進行範例化,分別進行單個範例和多個範例的測試。

2.1 單個範例

class Demo
{
    public static void main(String[] args)
    {
        new A();
    }
}

2.2 多個範例

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其它相關文章!