反射

框架設(shè)計的靈魂
框架:半成品軟件柿汛】撩可以在框架的基礎(chǔ)上進(jìn)行軟件開發(fā)鸠窗,簡化編碼胯究。

什么是反射:將類的各個組成部分封裝稱其他對象

好處:
1.可以在程序運(yùn)行過程中裕循,操作這些對象。
2.可以接偶硅则,提高程序的可擴(kuò)展性株婴。

反射類:Person.class

public class Person {
    private String name;
    private int age;

    public String a;
    protected String b;
    String c;
    private String d;

    private Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }

    private void eat(String str){
        System.out.println("eat....."+str);
    }
}

獲取Class對象的方式

1.Class.forName("全類名"):將字節(jié)碼文件加載到內(nèi)存
#多用于配制文件困介,將類名定義在配制文件中。讀取文件徒扶,加載類
2.類名.class:通過類名的屬性.class獲取
#多用于參數(shù)的傳遞
3.對象.getClass():getClass在Object類中定義
#多用于對象獲取字節(jié)碼

    Class personClass1 = Person.class;
    Class personClass2 = Class.forName("cn.test.Person");
    Class personClass3 = (new Person()).getClass();
    System.out.println(personClass1);
    System.out.println(personClass2);
    System.out.println(personClass3);

    System.out.println(personClass1 == personClass2);
    System.out.println(personClass1 == personClass3);

personClass1 == personClass2 == personClass3
結(jié)論:同一個字節(jié)碼文件(.class)在一次程序運(yùn)行過程中姜骡,只會被加載一次屿良,不論通過哪一種方式獲取

Class對象的功能

1.獲取成員變量
getFields: 獲取public成員變量
getDeclaredFields:獲取所有成員變量
getField(String name):獲取public具體的成員變量
getDeclaredField(String name):獲取具體的成員變量
獲取field值管引,設(shè)置field值

    Class personClass = Person.class;
    Object personClassInstance = personClass.newInstance();//創(chuàng)建實例對象

    Field name = personClass.getDeclaredField("name");
    name.setAccessible(true); //暴力反色號
    Object o = name.get(personClassInstance);//獲取值
    System.out.println(o);

    name.set(personClassInstance,"zhang");//設(shè)置值
    Object o1 = name.get(personClassInstance);
    System.out.println(o1);

2.獲取構(gòu)造方法
getConstructors()
getConstructor(Class<?>... parameterTypes)//不帶Declared是獲取public修飾的構(gòu)造方法
getDeclaredConstructors()
getDeclaredConstructor(Class<?>... parameterTypes) 參數(shù)

    //獲取構(gòu)造方法
    Constructor[] constructors = personClass.getDeclaredConstructors();
    for (Constructor constructor : constructors) {
        System.out.println(constructor);
    }

    Constructor declaredConstructor = personClass.getDeclaredConstructor(String.class, int.class);
    declaredConstructor.setAccessible(true);
    Object zhangj = declaredConstructor.newInstance("zhangj", 30);
    System.out.println(zhangj);

3.獲取成員方法
getMethods()
getMethod(String name, Class<?>... parameterTypes)
getDeclaredMethods()
getDeclaredMethod(String name, Class<?>... parameterTypes)//name:方法名;parameterTypes:參數(shù)列表

class Person {
    private void eat(String str){
        System.out.println("eat....."+str);
    }
}
    //獲取成員方法
    Method[] methods = personClass.getDeclaredMethods();
    for (Method method : methods) {
        System.out.println(method);
    }
    Method eatMethod = personClass.getDeclaredMethod("eat", String.class);
    eatMethod.setAccessible(true);
    eatMethod.invoke(personClassInstance,"面");

4.獲取類名

    personClass.getName();
    personClass.getPackage().getName();
    personClassInstance.getClass().getName();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饥臂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稽煤,老刑警劉巖酵熙,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰坊,死亡現(xiàn)場離奇詭異拳芙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)分飞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門譬猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邦泄,“玉大人,你說我怎么就攤上這事顺囊〖∷鳎” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵特碳,是天一觀的道長诚亚。 經(jīng)常有香客問我,道長午乓,這世上最難降的妖魔是什么站宗? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮益愈,結(jié)果婚禮上梢灭,老公的妹妹穿的比我還像新娘夷家。我一直安慰自己,他們只是感情好敏释,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钥顽,像睡著了一般义屏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜂大,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天闽铐,我揣著相機(jī)與錄音,去河邊找鬼奶浦。 笑死兄墅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的财喳。 我是一名探鬼主播察迟,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耳高!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起所踊,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤泌枪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秕岛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碌燕,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年继薛,在試婚紗的時候發(fā)現(xiàn)自己被綠了修壕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡遏考,死狀恐怖慈鸠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灌具,我是刑警寧澤青团,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站咖楣,受9級特大地震影響督笆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诱贿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一娃肿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦料扰、人聲如沸锨阿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墅诡。三九已至,卻和暖如春桐智,著一層夾襖步出監(jiān)牢的瞬間末早,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工说庭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留然磷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓刊驴,卻偏偏與公主長得像姿搜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捆憎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • 反射是框架設(shè)計的靈魂 軟件框架:軟件本成品舅柜,能夠幫助我們提高開發(fā)效率。Spring躲惰,SpringMVC致份,Mybat...
    六藝str閱讀 243評論 0 0
  • 1.1 框架的概念 ? 半成品軟件〈〔Γ可以在框架的基礎(chǔ)上進(jìn)行軟件開發(fā)氮块,簡化編碼。學(xué)習(xí)框架并不需要了解反射诡宗,但是要...
    AaFaa閱讀 234評論 0 0
  • 前言(來自文章https://blog.csdn.net/qq_44543508/article/details/...
    杜艷_66c4閱讀 179評論 0 0
  • 反射機(jī)制 由于需要通過外部文件配置滔蝉,在不修改源碼情況下,來控制程序塔沃,是符合設(shè)計模式的ocp原則(開閉原則) 反射機(jī)...
    笑火云天閱讀 142評論 0 0
  • 反射 框架設(shè)計的靈魂 Java中的反射顧名思義就是將類的各個組成部分封裝為其他對象蝠引。使用這些封裝后的對象可以進(jìn)行一...
    So_ProbuING閱讀 333評論 2 0