JVM 類的加載(四)- 父類子類加載關係

子類與父類的在類的啓動時,遵循父類先加載,子類後加載的規則,常會用做於坑爹筆試題。下面看代碼解釋。 有兩個類 Parent 和 Child,Child extend Parent。測試

public class Parent
{
	public static int parent;
	static
	{
		System.out.println("This is Parent");
	}
}
public class Child extends Parent
{
	public static int child;
	static
	{
		System.out.println("This is Child");
	}
}

接下來,咱們寫一個Test測試類來測試這父子類的加載順序code

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.child);
    }
}

咱們來輸出Child裏的child變量,結果爲對象

This is Parentclass

This is Child變量

0object

由此可看出,在訪問Child裏的靜態成員變量child的時候,會引發類的加載,同時,子類加載以前,父類會先於子類加載。因此先輸出父類結果,其次子類,最後本身的成員變量程序

緊接着,咱們再寫一個Test類來訪問父類筆試

public class Test {
    public static void main(String[] args) {
        System.out.println(Parent.parent);
    }
}

結果爲static

This is Parent筆試題

0

因而可知,在加載父類的時候,子類不會被加載。這個比較容易理解,由於全部的對象的父類都是object,若是你加載object時,子類也加載了,那程序豈不是要崩潰。。。

最後,再用下面的寫法再作一個測試,用子類去訪問父類的靜態成員變量

public class Test {
    public static void main(String[] args) {
        System.out.println(Child.parent);
    }
}

結果爲

This is Parent

0

子類仍是沒有被調用,這是爲何呢,這裏須要注意,雖然使用了Child的類,但並無訪問Child的靜態成員變量,因此不會引發Child類的加載,而父類Parent的靜態成員變量被訪問了,因此父類會加載。 結果就爲上。

相關文章
相關標籤/搜索