首先要知道的一點:程式呼叫時,jvm會初始化,初始化的過程中會生成多個類載入器,jvm呼叫指定的類載入器去載入類即可。類載入器分為兩類:系統提供和手動編寫
系統提供:
解釋:我們把每一層上面的類載入器叫做當前層類載入器的父載入器,當然,它們之間的父子關係並不是通過繼承關係來實現的,而是使用組合關係來復用父載入器中的**。
載入乙個類的時候,自己不會立即載入,而是先讓父類載入器尋找,依次向上,因此,所有的類載入請求最終都是傳遞到啟動類(也稱引導類bootstrap classloader)載入器;如果父類中沒有找到,才會從自己的類路徑中去尋找
簡而言之:自底而上的檢查類是否被載入,然後自頂而下的嘗試載入類
1.通過全類名獲取定義此類的二進位制位元組流
2.將位元組流所代表的靜態儲存結構轉換為方法區的執行時資料結構
3. 在記憶體中生成乙個代表該類額class物件,作為方法區
類的載入過程
類的載入過程 1 在建立物件時,會先判斷物件所屬的型別 類 在記憶體中是否存在,如果存在則直接使用 如果不存在,則把類載入到記憶體中的方法區下 2 在把類 class 載入到方法區時,分兩種情況 2.1 從.class檔案的上面向下依次載入內容 2.2 靜態的內容載入到方法區的靜態區域下 非靜態內容...
類的載入過程
person person new person 為例進行說明。1 因為new用到了person.class,所以會先找到person.class檔案,並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給person.class類進行初始化 3 在堆記憶體中開闢空間分配記憶體位址 4 ...
類的載入過程
類的載入過程,可分為三個階段,載入 連線 初始化。初始化,為類的靜態變數賦予預設的初始值 jvm規範規定了以下六種主動使用類的場景 被動呼叫,不會導致類的載入和初始化 先看乙個面試題 public class singleton public static singleton getinstance...