提問一個類預加載的問題,百思不得其解

提問之前,先請各位大神確認兩個觀點是否正確:

1、一個類被初始化,該類實現的接口不會被初始化;

2、虛擬機對於類有預加載機制,即判斷到某個類將要被使用的時候,會預先加載它,但是如果類的.class文件缺失或者錯誤,並不會報錯,而是等到該類首次被主動使用的時候纔會報錯,否則一直不會報錯,我的理解是,如果出現加載異常,那麼該類直到初始化的時候纔會報錯。

我一直深信我的觀點,直到我遇到一段代碼:

public class TestOq3 {
	public static void main(String[] args) {
		System.out.println(Child3.b);
	}
}

interface Parent09 {
	String a = "2"; 
}

class Child3 implements Parent09{
	public static String b = "3";
}

    System.out.println(Child3.b)  調用Child3.b的靜態屬性,會觸發 Child3 類的初始化,按照第一個觀點,不會引發 Parent09 這個接口的初始化。然而,我把編譯之後的 Parent09.class文件刪掉,再運行的時候,竟然會報錯:java.lang.NoClassDefFoundError,文件找不到我理解,畢竟我把  Parent09.class 文件刪掉了,但是我不理解的是,接口 Parent09 既然沒有被主動使用,爲啥就報錯了呢?按照第二種觀點,不應該是等到  Parent09 被初始化的時候,纔會報錯嗎?

   求路過的大神能講解一下,我是不是哪裏理解不對。跪謝,跪謝!!

   最後貼上報錯信息:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章