對於類的載入和類反射的理解

2022-09-13 00:03:36 字數 585 閱讀 3677

總體來說,類載入一共要進行三個階段

載入:將j**a原始檔預編譯成j**a.class位元組碼檔案然後載入進記憶體當中,並且將這些靜態資料轉換成方法區執行時的資料結構,最後生成乙個代表這個類的j**a.lang.class物件(有了物件就能夠呼叫類的方法,這也是反射的基礎)

驗證:對載入的類進行jvm規範驗證,確保沒有安全問題

準備:正式對類變數(static)進行記憶體分配,設定初始預設值(記憶體都在方法區進行分配)

初始化:

執行類構造器clinit()方法的過程。clinit()方法將會把類的所有賦值動作和靜態**塊進行合併

若發現父類還沒有初始化,虛擬機會對父類先進行初始化

虛擬機會保證乙個類的clinit()方法在多執行緒環境中被正確的加鎖和同步

前面類的載入說過:在載入過程中,你所寫的j**a源**會經過一系列的過程,最後生成乙個j**a.lang.class物件,也就是對你的類進行封裝成物件的過程。

簡單來說,反射就是將你的類封裝成物件,然後呼叫方法的過程。你可以在執行中呼叫方法,改變屬性值等等,這也就是為什麼j**a語言它是動態的

參考遇見狂神說的註解與反射p9

類的載入和反射機制

1.啟動jvm 2.將需要執行的class檔案載入到虛擬機器記憶體中 3.找到主類,開始執行主函式 載入步驟 1.先委託父類載入類,如果父類已經載入,就不需要再次載入,如果父類沒有載入,再由本載入器載入 2.解析類路徑,將類路徑轉換成檔案路徑 3.通過檔案輸入流來讀取class檔案,得到位元組陣列 ...

反射 Reflect JVM類載入

概念 在程式執行的時候 動態的載入類和類的資訊。package com.qianfeng.reflects public class person public person string name,integer age,string add public string getname publi...

反射2 動態載入類

動態載入 和靜態載入的區別 class.forname 類的全稱 編譯時刻載入類是靜態載入類,執行時刻載入類是動態載入類。package dog public class animal if cat equals args 0 package dog public class dog 很顯然以上第一...