從JAVA虛擬機的角度來說,只有兩種類型的類加載器:啓動類加載器,由C++實現,是虛擬機自身的一部分;全部其餘的類加載器,由java語言實現,獨立於虛擬機外部,而且所有繼承自java.lang.ClassLoader。java
從java開發人員的角度來看,通常是由三種類加載器線程
BootStrap ClassLoader設計
Exetension ClassLoader繼承
Application ClassLoader開發
這裏列加載器之間的父子關係通常不是繼承關係,而是以組合關係來複用父加載器的代碼。虛擬機
破壞雙親委派模型io
第一次被破壞發生在雙親委派模型出現以前,對已經存在的用戶自定義類加載器的實現代碼,java設計者引入雙親委派時不得不作出一些妥協。在java.lang.ClassLoader添加了一個新的protected findClass()方法,去重寫loadClass()方法。基礎
第二次是由自身的缺陷所致使的,雙親委派很好地解決了各個類加載器的基礎類的同一問題,可是若是出現基礎類又要調用回用戶的代碼時就要破壞該模型。引入了線程上下文類加載器。程序
第三次是因爲用戶對程序動態性的追求而致使的。方法