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的構造方法