2016-06-21 116 views
0

在努力學習有關Java類加載器從Wikipedia,我想我能明白他們爲什麼有三大類加載器:Java類加載器的複雜性

1)引導類加載器
2)擴展類加載器
3 )系統類加載程序

他們繼續說你可以定義你自己的類加載器。我不知道我看到在定義自己的價值,但是從Wikipedia以下報價真讓我懷疑:

最複雜的JAR地獄問題出現在需要的全部複雜性的 優勢的情況下類加載系統。 Java 程序不需要僅使用單個「平坦」類加載器,而是可以由幾個(可能非常多)嵌套的,合作類​​加載器組成 。由不同的類加載器加載的類可能會以複雜的方式進行交互,但開發人員無法完全理解,導致錯誤或難以分析,解釋和解決的錯誤。


如果這是如此複雜,爲什麼要打擾呢?這三個已經定義好的類加載器不夠嗎?

(是的,對於那些好奇,我沒有碰上一個ClassCastException,我不認爲應該發生的,就像圖形標記Figure 2. Class identity crisis。我想了解的背景就是一切。)

回答

1

某些用例需要自定義類加載器。 幾個例子:

  • 動態添加新的文件夾/罐子可加載。 (無需重新啓動整個應用程序)。
  • 動態刪除可加載的文件夾/罐子。
  • 用javassist生成運行時字節碼。
  • 多個(實際同時使用)同一應用程序中相同類的多個版本/ jvm