JAVA的反射機(jī)制

一、反射的三種實(shí)現(xiàn)方式
  • 對象.getClass()
  • 類.class
  • Class.forName("傳入需要反射的類路徑")
二、反射原理

1.Class.forName()方法實(shí)際上也是調(diào)用的CLassLoader(類加載器)來實(shí)現(xiàn)的。內(nèi)部實(shí)際調(diào)用的方法是forName0(className, true, ClassLoader.getClassLoader(caller), caller)

  • className:表示我們要加載的類名(這里是類的全路徑名)
  • true:指Class被加載后是不是必須被初始化。 不初始化就是不執(zhí)行static的代碼即靜態(tài)代碼,在這里默認(rèn)為true,也就是默認(rèn)實(shí)現(xiàn)類的初始化。
  • ClassLoader.getClassLoader(caller):表示類加載器,到這你會發(fā)現(xiàn)forNanme其實(shí)也是使用的ClassLoader類加載器加載的。
  • caller:指定類加載器。

2.classLoader

  • 當(dāng)調(diào)用類時會觸發(fā)classLoader(JVM類加載器)
  • JVM加載根據(jù)name到磁盤中找到對應(yīng)的.class文件并加載到內(nèi)存中
  • 當(dāng).class對象加載入內(nèi)存后,JVM會自動創(chuàng)建應(yīng)該class對象。(一個類只會產(chǎn)生一個class對象,這個遵循了雙親委派模型)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本部分主要介紹:Java 的反射機(jī)制的原理及使用 先知知識點(diǎn) Java 的 接口 (interface)對外提供規(guī)...
    sshentree閱讀 270評論 0 1
  • 動態(tài)語言 動態(tài)語言,是指程序在運(yùn)行時可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn),已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化。比如...
    諾天高云淡閱讀 444評論 1 0
  • 不論是 Java 開發(fā) 還是 Android 開發(fā),反射、泛型、注解 都是架構(gòu)設(shè)計(jì)中很重要的一個知識點(diǎn)。 為了更好...
    JamFF閱讀 584評論 0 4
  • 1.1 框架的概念 ? 半成品軟件??梢栽诳蚣艿幕A(chǔ)上進(jìn)行軟件開發(fā),簡化編碼。學(xué)習(xí)框架并不需要了解反射,但是要...
    AaFaa閱讀 347評論 0 0
  • java反射機(jī)制與類加載機(jī)制 Class (Java SE 9 & JDK 9 ) - https://docs....
    堅(jiān)果jimbowhy閱讀 1,104評論 0 0

友情鏈接更多精彩內(nèi)容