java方法調用順序



public class JavalearningApplicationTests { static { System.out.println("Test的靜態代碼塊"); } public static void main(String[] args) { System.out.println("執行main方法"); B b = new B(); b.excute(); } }

 

具體類方法:

 

public class B extends A{
    static {
        System.out.println("ClassB的靜態代碼塊");
    }

    public B() {
        System.out.println("ClassB的構造方法");
    }

    {
        System.out.println("ClassB的構造代碼塊");
    }

    public final static B Classb = new B();

    public void excute(){
        System.out.println("執行方法");
    }
}

 A:

public class A {
    static {
        System.out.println("ClassA的靜態代碼塊");
    }

    public A() {
        System.out.println("ClassA的構造方法");
    }

    {
        System.out.println("ClassA的構造代碼塊");
    }
}

執行結果:

Test的靜態代碼塊
執行main方法
ClassA的靜態代碼塊
ClassB的靜態代碼塊
ClassA的構造代碼塊
ClassA的構造方法
ClassB的構造代碼塊
ClassB的構造方法
ClassA的構造代碼塊
ClassA的構造方法
ClassB的構造代碼塊
ClassB的構造方法
執行方法

 結論:

1、同一個類中執行先后順序:

靜態代碼塊-->(構造代碼塊-->構造方法)

2、子類和父類的先后順序

父類 靜態代碼塊-->子類 靜態代碼塊

-->父類構造代碼塊--父類構造方法

--子類構造代碼塊--子類構造方法

先父類后子類,構造代碼塊和構造方法一起執行之后再執行子類 

3、最后執行對象方法

 

如果類還沒有被加載:
1、先執行父類的靜態代碼塊和靜態變量初始化,並且靜態代碼塊和靜態變量的執行順序只跟代碼中出現的順序有關。
2、執行子類的靜態代碼塊和靜態變量初始化。
3、執行父類的實例變量初始化
4、執行父類的構造函數
5、執行子類的實例變量初始化
6、執行子類的構造函數

 


免責聲明!

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



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