2015-06-20 53 views
-1

最近,我被一位計算機科學專家問到,要描述Java中的類加載器。我向他解釋了3個類加載器,即「BootStrap CL」,「Extension CL」和「Application CL」,我也向他解釋了「解析算法」。接下來,他要求我證明這一點,任何人都可以給我一個代碼來實際看到執行中的類加載器?如何知道哪些類正在通過哪些類加載程序在Java中加載?

+0

如果您不想回答,則不需要downvote。你沒有被迫回答。 。轉向其他一些問題! –

回答

1

有幾個方法,你可以去了解這一點:

  1. 表明,不同類別有不同的ClassLoader對象。例如,YourMainClass.class.getClassLoader()可能是sun.misc.Launcher$AppClassLoader,而System.class.getClassLoader()爲空(與其他系統類一樣)。這裏是一個快速測試:從JAR

    父類加載器以下列方式使用:

    1. 類加載器臨危加載一個類的請求。如果它已經加載,它會返回它。
    2. 該類加載器首先要求其父代加載它。如果父代不能加載它,那麼該類加載器自己加載並返回它。
  2. 顯示OpenJDK源代碼及其多個ClassLoader。

  3. 描述在真實世界中發生這種情況的應用程序。您可以討論在運行時定義類的腳本引擎,servlet容器,特定的構建系統等。

+0

Null指的是什麼?這是否意味着Bootstrap Class Loader會加載預定義的類,但是由於Bootstrap Class Loader是使用Native語言而不是java,而其他2類是Java類,因此它會將輸出設置爲null,而其他2則會給出輸出assun.misc.Launcher $ ApplicationClassLoader ? –

+0

以及如何測試擴展類加載器? –

+0

@Milind是的,這似乎是正確的。引導類加載器似乎沒有'ClassLoader'對象,而是JVM的本機代碼的一部分。它不能用Java編寫,因爲那時將不會有類加載器加載它及其依賴關係。 – hexafraction

相關問題