關於類的載入機制
首先我們要知道類載入機制的原理是什麼?
1.啟動jvm
2.將需要執行的class檔案載入到虛擬機器記憶體中
3.找到主類,開始執行主函式
然後又是如何將class檔案載入到jvm記憶體中的?
載入步驟:
1.先委託父類載入類,如果父類已經載入,就不需要再次載入,如果父類沒有載入,再由本載入器載入
2.解析類路徑,將類路徑轉換成檔案路徑
3.通過檔案輸入流來讀取class檔案,得到位元組陣列
4.將位元組陣列轉換成類物件,物件的型別是class型別
先來看一下class物件的幾種方式:
1.通過類名.class
class c1 = student.class;
2.通過物件的getclass()方法
class c2 = stu.getclass();
3.通過類載入器獲得class物件
classloader classloader = classloader.getsystemclassloader();
class c3 = classloader.loadclass(「com.newer.test.student」);
4.通過 class.forname()獲得class物件;
class c4 = class.forname(「com.newer.test.student」);
我們還可以通過class物件獲得構造方法物件如以下:
1.獲得所有可見的構造方法
constructor[
] cons= c.
getconstructors()
;2.獲得所有已經宣告的構造方法
constructor[
] cons2= c.
getdeclaredconstructors()
;3.獲得指定的可見的某乙個構造方法
constructor cc = c.
getconstructor
(int
.class
,string.
class
,int
.class);
4.從宣告的方法中獲得指定的構造方法
constructor cc2 = c.
getdeclaredconstructor
(int
.class);
5.通過構造方法來例項化物件
object obj = cc.
newinstance
(構造方法的引數)
;6.訪問私有構造方法
cc2.
setaccessible
(true
);
類載入機制
類的生命週期 乙個類從被載入到記憶體中開始,他的生命週期包括以下幾個階段 類載入時機 類是什麼時候開始載入的?虛擬機器並沒有明確規定,可以由虛擬機器自行實現,但是在類初始化前類必須被載入,虛擬機器明確規定了有且只有5種情況必須進行類的初始化,因此我們也可以理解為類載入的5個時機。使用new關鍵字例項...
雙親委託類載入機制 類載入器機制
啟動類載入器和擴充套件類載入器沒有父類載入器,而系統類載入器的父類載入器是擴充套件類載入器,自定義類載入器父類載入器則是擴充套件類載入器 所謂的類載入 就是建立.class檔案對應的class物件,並將class檔案載入到記憶體的過程。1 載入 查詢類的.class檔案,並建立class物件 3 初...
JVM 類載入機制 類載入器
類宣告週期 檔案格式驗證 基於二進位製流,只有這一步是基於二進位製流,後續步驟都是基於方法區資料 1.魔數 cafe babe 開頭 2.主次版本是否在當前jvm支援範圍 3.常量池的常量是否不被支援 4.很多很多規範 元資料驗證 1.類是否有父類,object 2.匪類是否繼承了被final修飾的...