類加載器負責根據類的全限定名將class文件加載到JVM內存,生成Class類的對象。它分爲如下幾種類型:java
雙親委派機制:若是一個類未加載,那麼必須先由其父加載器(Bootstrap Classloader能夠認爲是ExtClassLoader父加載器)嘗試加載,若是父加載器在其路徑內找不到該類才由子加載器加載。能夠防止核心類被外來類覆蓋。具體的源碼分析能夠參見深刻理解Java類加載器(ClassLoader)。
下面是結合源碼,畫出的利用AppClassLoader查找類的流程圖:數組
咱們一般寫的用class(首字母c小寫)定義的類,表徵了java虛擬機裏對象的類型(java是強類型語言),但同時這些類又都是java.lang.Class(首字母C大寫)的對象,經過AppClassLoader加載進虛擬機內存方法區。每一個類都對應一個獨一無二的Class對象,包括Java基本類型、void關鍵字及數組(全部同一維度和類型的數組擁有一樣的Class,數組的長度不作考慮。對應Class的名字表示爲維度和類型。好比一個整型數據的Class名爲「[I」,字節型三維數組Class名爲「[[[B」,兩維對象數組Class名爲「[[Ljava.lang.Object」)。獲得Class對象的方法有三種:源碼分析
MyObject foo = New MyObject(); Class c = foo.getClass(); Class c = Class.ForName("MyObject"); Class c = MyObject.class;