【反射機(jī)制】Java反射機(jī)制原理和基本使用

1邑商、概況:

是在運(yùn)行狀態(tài)中删掀,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法袁波;對(duì)于任意一個(gè)對(duì)象瓦阐,都能夠調(diào)用它的任意方法和屬性(不能調(diào)用其私有屬性和方法);這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語(yǔ)言的反射機(jī)制

2篷牌、原理:

  • 當(dāng)一個(gè)類被加載以后睡蟋,Java虛擬機(jī)就會(huì)自動(dòng)產(chǎn)生一個(gè)Class對(duì)象。通過(guò)這個(gè)Class對(duì)象我們就能獲得加載到虛擬機(jī)當(dāng)中這個(gè)Class對(duì)象對(duì)應(yīng)的方法枷颊、成員以及構(gòu)造方法的聲明和定義等信息戳杀。
  • 要正確使用Java反射機(jī)制就得使用java.lang.Class這個(gè)類。

3夭苗、優(yōu)缺點(diǎn):

  • 優(yōu)點(diǎn):
    1信卡、能夠運(yùn)行時(shí)動(dòng)態(tài)獲取類的實(shí)例,大大提高系統(tǒng)的靈活性和擴(kuò)展性题造。

  • 缺點(diǎn):
    1傍菇、反射操作的效率要比那些非反射操作低得多,因?yàn)榉瓷浒ㄒ恍㎎VM無(wú)法對(duì)其代碼進(jìn)行優(yōu)化動(dòng)態(tài)類型界赔;

4丢习、使用:

/**
 * @author Fang Lingchuan
 *
 * @deprecated java反射測(cè)試實(shí)體類
 */
public class Programmer {

    public int age = 26;
    private String name = "LZ";

    public Programmer() {

    }

    public Programmer(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void doWork(String work){
        System.out.print(age+"歲的"+name+"從事"+work);
    }

}
/**
 * @author Fang Lingchuan
 *
 * @deprecated java反射測(cè)試類
 */
public class TestReflection {

    public static void main(String[] args){

        try {
            //獲取Class對(duì)象
            Class cp = Class.forName("com.jimi.mvptest.reflection.Programmer");
            //獲取class對(duì)象中的dowork方法,該方法帶有一個(gè)字符串參數(shù)
            Method mp = cp.getDeclaredMethod("doWork",String.class);
            //生成實(shí)例
            Object obj = cp.newInstance();
            //直接使用方法實(shí)例執(zhí)行方法體
            Object retValue = mp.invoke(obj, "ABCD順序的打亂工作\n");

            //向下轉(zhuǎn)型淮悼,獲取該類的實(shí)例
            Programmer sm = (Programmer) obj;
            sm.setName("大川");
            sm.doWork("abcd的排列組合");

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}

運(yùn)行結(jié)果:

輸出結(jié)果.png

5咐低、Class Api文檔:

Packages:java.lang下的Class類
中文文檔>>
英文文檔>>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市袜腥,隨后出現(xiàn)的幾起案子见擦,更是在濱河造成了極大的恐慌,老刑警劉巖瞧挤,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锡宋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡特恬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門徐钠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)癌刽,“玉大人,你說(shuō)我怎么就攤上這事∠园荩” “怎么了衡奥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)远荠。 經(jīng)常有香客問(wèn)我矮固,道長(zhǎng),這世上最難降的妖魔是什么譬淳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任档址,我火速辦了婚禮,結(jié)果婚禮上邻梆,老公的妹妹穿的比我還像新娘守伸。我一直安慰自己,他們只是感情好浦妄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布尼摹。 她就那樣靜靜地躺著,像睡著了一般剂娄。 火紅的嫁衣襯著肌膚如雪蠢涝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天阅懦,我揣著相機(jī)與錄音惠赫,去河邊找鬼。 笑死故黑,一個(gè)胖子當(dāng)著我的面吹牛果善,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吨枉,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼揍堰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了诗轻?” 一聲冷哼從身側(cè)響起钳宪,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扳炬,沒(méi)想到半個(gè)月后吏颖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恨樟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年半醉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劝术。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缩多,死狀恐怖呆奕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衬吆,我是刑警寧澤梁钾,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站逊抡,受9級(jí)特大地震影響姆泻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冒嫡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一拇勃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灯谣,春花似錦潜秋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辜窑,卻和暖如春钩述,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穆碎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工牙勘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人所禀。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓方面,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親色徘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恭金,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)褂策,斷路器横腿,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法斤寂,內(nèi)部類的語(yǔ)法耿焊,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法遍搞,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,581評(píng)論 18 399
  • 不要因?yàn)樵?jīng)的發(fā)生而迷戀于過(guò)去罗侯,不要因?yàn)榭床坏浇Y(jié)局而糾結(jié)于未來(lái),請(qǐng)時(shí)刻享受當(dāng)下尾抑,關(guān)注此刻. 我們都有一個(gè)常見(jiàn)的習(xí)慣...
    生態(tài)締造者閱讀 638評(píng)論 0 8
  • 1再愈、別奢望別人給你經(jīng)濟(jì)上的任何幫助榜苫, 錢對(duì)任何人都是不夠用的。 (學(xué)會(huì)理解) 2翎冲、朋友幫你是善事垂睬,是道義; 朋友不...
    子煜c閱讀 510評(píng)論 0 3
  • 沒(méi)有人知道我的孤獨(dú)是什么抗悍,就像沒(méi)人會(huì)明白地球?yàn)樯妒菆A的驹饺。 夜晚來(lái)臨,將要睡覺(jué)的時(shí)候我有種莫名的孤獨(dú)存在感缴渊。是...
    王帥_2d00閱讀 201評(píng)論 0 0