歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 類與對象的初始化

面試的時候,經常會遇到這樣的筆試題:給你兩個類的代碼,它們之間是繼承的關系,每個類裡只有構造器方法和靜態塊,它們只包含一些簡單的輸出字符串到控制台的代碼,然後讓我們寫出正確的輸出結果。這實際上是在考察我們對於類的初始化知識的了解。

首先,我們先看看下面的代碼,這就是很經典的考察方式。

public class InitField {
    public static void main(String[] args) {
        SuperInitField p = new SuperInitField();
        SuperInitField c = new SubInitField();
    }
}

class SuperInitField {
    public SuperInitField() {
        System.out.println("parent");
    }
    static {
        System.out.println("static parent");
    }

}

class SubInitField extends SuperInitField {
    public SubInitField() {
        System.out.println("child");
    }
    static {
        System.out.println("static child");
    }
}

不管你是否能很快速的寫出正確的答案,我們先把這個程序放一邊,了解一下Java虛擬機初始化的原理。

JVM通過加裝、連接和初始化一個Java類型,使該類型可以被正在運行的Java程序所使用。類型的生命周期如下圖所示:

    

裝載和連接必須在初始化之前就要完成。

Copyright © Linux教程網 All Rights Reserved