1. 程式人生 > >java中的內部類執行先後循序問題

java中的內部類執行先後循序問題

首先我們要明白java中的內部類是什麼呢?有什麼好處呢?為什麼要用到內部類呢?下面這兩個部落格介紹都挺好的

https://blog.csdn.net/gaoyong_stone/article/details/79556287

https://www.cnblogs.com/hypnotizer/p/5858439.html

接下來,可以參考下我寫的測試demo

public class StaticTest {
    public static void main(String[] args){
        new Dog();
    }
}
class Animal{
    static{
        System.out.print("a");
    }
    public Animal(){
        System.out.print("b");
    }
}
class Dog extends Animal{  
    Cat cat = new Cat();
    public Dog(){
        System.out.print("c");   
    }
    static{
        System.out.print("f");
    }
}
class Cat extends Animal{
    public Cat(){
        System.out.print("d");
    }
    static{
        System.out.print("e");
    }
}

來解釋一下為什麼列印的結果是這樣子呢?

1、在new B一個例項時首先要進行類的裝載。(類只有在使用New呼叫建立的時候才會被java類裝載器裝入)
 2、在裝載類時,先裝載父類A,再裝載子類B
 3、裝載父類A後,完成靜態動作(包括靜態程式碼和變數,它們的級別是相同的,安裝程式碼中出現的順序初始化)
 4、裝載子類B後,完成靜態動作
 類裝載完成,開始進行例項化
1、在例項化子類B時,先要例項化父類A
 2、例項化父類A時,先成員例項化(非靜態程式碼)
 3、父類A的構造方法
 4、子類B的成員例項化(非靜態程式碼)
 5、子類B的構造方法