反射機(jī)制

反射機(jī)制

  • 什么是動(dòng)態(tài)語言?
    當(dāng)程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類型,這種語言叫做動(dòng)態(tài)語言,比如python。
    但是Java并不是一種動(dòng)態(tài)語言,但是它有一套非常突出的動(dòng)態(tài)相關(guān)機(jī)制,叫做reflection

Class類

  • Java中不是對象的東西?
    Static修飾的東西,屬于類
    普通的數(shù)據(jù)類型,如int、char等
    其他的都是對象,連類本身,也是java.lang.Class的對象
  • 任何一個(gè)類都是Class類的實(shí)例化對象,這種實(shí)例化對象有三種表達(dá)方式:
F f = new F() ; 
Class c1 = F.class;  //1. 任何一個(gè)類都有一個(gè)隱含的靜態(tài)成員變量class
Class c2 = f.getClass();  //2. 已知該類的對象的情況下,通過getClass()方法獲取
Class c3 = null;
C3 = Class.forName(“com.text.F”); //3. 類的全稱
  • 通過類的類類型創(chuàng)建該類的對象實(shí)例:
Foo foo = (Foo) c1.getNewInstance()

方法的反射

  • Class有一個(gè)最簡單的方法,getName()
  • Method類:所有方法是Method類的對象
  • 通過方法的反射的相關(guān)步驟:
    獲取該類的類類型
    通過該類類型獲取該類的方法
    循環(huán)遍歷所獲取到的方法
    通過這些方法的getReturnType得到返回值類型的類類型,又通過該類類型得到返回值的名字
    getName()得到方法的名稱,getParameterTypes()獲得這個(gè)方法里面的參數(shù)類型的類類型

成員變量的反射

成員變量是java.lang.reflect.Field類的對象,通過getFields()方法獲取所有public的成員變量的信息,通過getDeclaredFields()獲取自己聲明的成員變量

構(gòu)造函數(shù)的放射

構(gòu)造函數(shù)是Constructor類的對象
Class c = obj.getClass();
Constructor[] cs = c.getDeclaredConstructors();
Class[] paramTypes = constructor.getParameterTypes();

Class類的動(dòng)態(tài)加載類

編譯時(shí)刻加載的類是靜態(tài)加載,運(yùn)行時(shí)刻加載的類是動(dòng)態(tài)加載。需要的時(shí)候再生成

Stand s = (Stand) cl.newInstance();
Class B implements Stand{
Public void start(){
System.out.print("B...satrt");}}

參考:http://www.importnew.com/23560.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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