Java子父類間靜態代碼塊、非靜態代碼塊、構造方法的執行順序


子類A繼承父類B,A a=new A();

正確的執行順序是:父類B靜態代碼塊->子類A靜態代碼塊->父類B非靜態代碼塊->父類B構造函數->子類A非靜態代碼塊->子類A構造函數

也就是說非靜態初始化塊的執行順序要在構造函數之前。

 

class FatherStaticTest 
{
    static
    {
        System.out.println("執行父類的靜態代碼塊。");
    }

    FatherStaticTest()
    {
         System.out.println("執行父類的不帶參數的構造方法。");
    }



    FatherStaticTest(String str)
    {
         System.out.println("執行父類的帶參數的構造方法。"+str);
    }

    {
        int i = 1;
        int j = 1;
        int sum = (i+j);
        System.out.println("執行父類的構造代碼塊。"+sum);
    }


}

class SonStaticTest extends FatherStaticTest
{
    static
    {
        System.out.println("執行子類的靜態代碼塊。");
    }

    SonStaticTest()
    {

         System.out.println("執行子類的不帶參數的構造方法。");
    }



    SonStaticTest(String str)
    {
        super(str);
        System.out.println("執行子類的帶參數的構造方法。"+str);
    }

    {
        int i = 2;
        int j = 2;
        int sum = (i+j);
        System.out.println("執行子類的構造代碼塊。"+sum);
    }



}

public class SuperClass {

    public static void main(String[] args)
    {
        
        new SonStaticTest("a");
    }
}

 

執行完之后可以看到順序如下:

執行父類的靜態代碼塊。
執行子類的靜態代碼塊。
執行父類的構造代碼塊。2
執行父類的帶參數的構造方法。a
執行子類的構造代碼塊。4
執行子類的帶參數的構造方法。a

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM