Java基礎(chǔ)學(xué)習(xí):java反射機(jī)制原理

Java基礎(chǔ)學(xué)習(xí):java反射機(jī)制原理

長沙牛耳教育      2022-04-07 11:00:01     8

Java基礎(chǔ)學(xué)習(xí):java反射機(jī)制原理,一反射機(jī)制的概念:指在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任意一個(gè)對(duì)象,都能調(diào)用它的任意一個(gè)方

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

    一反射機(jī)制的概念:

    指在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任意一個(gè)對(duì)象,都能調(diào)用它的任意一個(gè)方法.這種動(dòng)態(tài)獲取信息,以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能叫java語言的反射機(jī)制.

    二反射機(jī)制的應(yīng)用:

    生成動(dòng)態(tài)代理,面向切片編程(在調(diào)用方法的前后各加棧幀).

    三反射機(jī)制的原理:

    1首先明確的概念:一切皆對(duì)象----類也是對(duì)象.

    2然后知道類中的內(nèi)容:modifierconstructorfieldmethod.

    3其次明白加載:當(dāng)Animal.class在硬盤中時(shí),是一個(gè)文件,當(dāng)載入到內(nèi)存中,可以認(rèn)為是一個(gè)對(duì)象,是java.lang.class的對(duì)象.

    當(dāng)運(yùn)行程序時(shí),實(shí)例化時(shí)產(chǎn)生Animal.class對(duì)象,這兩個(gè)對(duì)象有什么區(qū)別?

    如下圖,上面的Animal.class對(duì)象是java.lang.class的對(duì)象;下面的對(duì)象是Animal.class實(shí)例化產(chǎn)生的對(duì)象

    4當(dāng)Animal.class載入到JVM中,JVM是怎么識(shí)別Animal.class中含有的方法,成員變量,構(gòu)造方法等內(nèi)容?

    如下圖,Animal.class實(shí)例化對(duì)象中成員變量毛色=紅色;

    加載到內(nèi)存的時(shí)候,毛色=null,是在實(shí)例化的時(shí)候毛色被賦值為紅色.

    Animal.class中毛色這個(gè)屬性對(duì)于java.lang.class來說,是Field的一個(gè)屬性值,毛色對(duì)于java.lang.class來說也是一個(gè)對(duì)象.這也是反射機(jī)制動(dòng)態(tài)獲取信息,以及動(dòng)態(tài)調(diào)用對(duì)象方法的原因.

    下圖是Java.lang.class中的方法

    在java.lang.class中,毛色是Field的一個(gè)屬性值,Animal中所有的方法,成員變量,構(gòu)造器,修飾符都是按照java.lang.class中的標(biāo)準(zhǔn)去寫的,否則會(huì)在編譯的時(shí)候報(bào)錯(cuò)

    在java.lang.class中,毛色是Field的一個(gè)屬性值,Animal中所有的方法,成員變量,構(gòu)造器,修飾符都是按照java.lang.class中的標(biāo)準(zhǔn)去寫的,否則會(huì)在編譯的時(shí)候報(bào)錯(cuò)四反射機(jī)制簡單實(shí)例代碼

    publicclass_14_ReflectTest07

    {

    publicstaticvoidmain(String[]args)throwsException{

    //1.獲取類

    Classc=Class.forName("_12_CustomerService");

    //獲取某個(gè)特定的方法

    //通過:方法名+形參列表

    Methodm=c.getDeclaredMethod("login",String.class,String.class);

    //通過反射機(jī)制執(zhí)行l(wèi)ogin方法.

    Objecto=c.newInstance();

    //調(diào)用o對(duì)象的m方法,傳遞"admin""123"參數(shù),方法的執(zhí)行結(jié)果是retValue

    ObjectretValue=m.invoke(o,"admin","123");

    System.out.println(retValue);//true

    }

    }

    publicclass_12_CustomerService

    {

    //登錄

    publicbooleanlogin(Stringname,Stringpwd){

    if("admin".equals(name)&&"123".equals(pwd)){

    returntrue;

    }

    returnfalse;

    }

    //退出

    publicvoidlogout(){

    System.out.println("系統(tǒng)已安全退出!");

    }

    }

 以上就是長沙牛耳教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java反射機(jī)制原理”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java基礎(chǔ)學(xué)習(xí)

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。