1.啟動jvm
2.將需要執行的class檔案載入到虛擬機器記憶體中
3.找到主類,開始執行主函式
載入步驟:
1.先委託父類載入類,如果父類已經載入,就不需要再次載入,如果父類沒有載入,再由本載入器載入
2.解析類路徑,將類路徑轉換成檔案路徑
3.通過檔案輸入流來讀取class檔案,得到位元組陣列
4.將位元組陣列轉換成類物件,物件的型別是class型別
應用類載入器,負責載入核心類,載入自己寫的類
extclassloader
擴充套件類載入器,負責載入擴充套件類庫
bootstrap
jvm內建的載入器
bootstrap
類載入器是jvm的一部分,隨著啟動虛擬機器就會建立乙個bootstrap類載入器物件
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"
);
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
);
通過構造方法來例項化物件
object obj = cc.
newinstance
(構造方法的引數)
;
訪問私有構造方法
cc2.
setaccessible
(true
);
java通過反射機制載入類方法和例項方法
假設某乙個類的類名是a.現在我想要通過反射機制找到其中的某乙個方法functionb 並呼叫這個方法。method functionb a.class.getmethod functionb class.paramtype functionb.invoke a.class,object.args 這...
Java反射機制總結學習 動態載入類
首先有如下 public class dynamicloadclass else if b equals args 0 class a class b 上面 可以正常編譯 執行。但是如果此時沒有b類,而且,我們的需求也不需要b類,就只用a類的方法就可以了,這個時候我們就需要main函式的 然後重新編...
對於類的載入和類反射的理解
總體來說,類載入一共要進行三個階段 載入 將j a原始檔預編譯成j a.class位元組碼檔案然後載入進記憶體當中,並且將這些靜態資料轉換成方法區執行時的資料結構,最後生成乙個代表這個類的j a.lang.class物件 有了物件就能夠呼叫類的方法,這也是反射的基礎 驗證 對載入的類進行jvm規範驗...