java 反射之Field

image.png

一眼望不到頭的隔壁灘,還有站在山頭望著那邊的山頭叶摄,山那邊的山是什么樣的属韧,很明顯不得而知,而我的思緒卻早已飛到了山那邊的山蛤吓,抬頭便是晴空萬里宵喂,白天哼著小曲,放著羊会傲,夕陽西下的場景锅棕,不知不覺得浮現(xiàn)出小時候的場景,記得那時淌山,晚飯過后裸燎,躺在父親的懷里,一顆星星泼疑、二顆德绿、三顆......咳咳,思緒又回來了退渗,了解完method我們來看看filed(字段)移稳,那么如何獲取filed?

獲取Filed的方式:

  > 1.public Filed[] getFileds();表示返回該對象字節(jié)碼所表示類的能夠訪問的所有公共字段会油。
    2.public Filed[] getDeclaredFileds();表示返回該字節(jié)碼對象所表示類的所有字段(沒有訪問權(quán)限的限制)个粱,代碼如下:

代碼示例:

class Teacher{
     public String name;
     private int id;
     private int age;

public Teacher(String name, int id, int age) {
    this.name = name;
    this.id = id;
    this.age = age;

}

public Teacher() {

}

public String getName() {
    return name;
}

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

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getAge() {
    return age;
}

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

為了能夠更好地理解,在這里我寫了一個Teacher類翻翩,我們接著來看:

代碼示例:

   private static void getAllField(){

    獲取該字段所對應(yīng)類的字節(jié)碼
    Class<Teacher> clazz = Teacher.class;
    獲取所有的公共的字段
    Field[] fields = clazz.getFields();
    System.out.println(fields.length);
    for (Field f:fields) {
        System.out.println(f);
    }
    System.out.println("=============================");
    獲取所有的字段都许,與訪問權(quán)限無關(guān)
    fields = clazz.getDeclaredFields();
    System.out.println(fields.length);
    for (Field f1:fields) {
        System.out.println(f1);
    }
}

測試結(jié)果如下:

QQ截圖20180505205741.png

由上圖可知,我們拿到了該類的所有字段梭稚,上面我們只是拿到了所有的字段,在實際中我們可能只需要其中某一個絮吵,所以不必要都拿到,通過API我們可以發(fā)現(xiàn),我們可以單獨的拿到我們想要的那個字段暇昂,直接上代碼:

  > 1.public Filed getFiled(String name);表示返回一個Filed對象,而且是一個公共的可訪問的字段急波,參數(shù):name表示字段名。
    2.public Filed getDeclaredFiled(String name);表示返回一個Filed對象澄暮,與訪問權(quán)限無關(guān)

代碼示例:

    獲取單個字段
    private static void getOneField()throws Exception{
    Teacher th = new Teacher();
    th.setName("張三");
    th.setAge(18);
    th.setId(1001);

    Class<Teacher> clazz = Teacher.class;
    獲取修飾符為公共的字段
    Field field = clazz.getField("name");
    給該字段設(shè)置新值
    field.set(th,"哈哈");

    System.out.println( field.get(th));
   返回該字段的修飾符
    System.out.println(field.getModifiers());
    返回該字段名稱
    System.out.println(field.getName());
    System.out.println(field.toString());
    System.out.println("===================");
    獲取修飾符私有的字段
     private int id
    獲取該字段,與訪問權(quán)限無關(guān)
     field = clazz.getDeclaredField("id");
     設(shè)置允許訪問私有的字段
     field.setAccessible(true);
     設(shè)置新的值
     field.set(th,1111);
    System.out.println(field.get(th));
    System.out.println(field.getName());
    System.out.println(field.getModifiers());
    System.out.println(field.toString());
    返回該字段的聲明類型
    System.out.println(field.getType());
    System.out.println("=====================");
    獲取該 private int age
    field = clazz.getDeclaredField("age");
    field.setAccessible(true);
    field.set(th,60);
    System.out.println(field.get(th));
    System.out.println(field.getName());
    System.out.println(field.getModifiers());
    System.out.println(field.toString());
}

從代碼中我們得知泣懊,通過get(Object obj)獲取屬性的值,通過set(Object obj,value)重新設(shè)置新的屬性值馍刮,并且當(dāng)我們需要獲取私有屬性的屬性值得時候信夫,我們必須設(shè)置Accessible為true,然后才能獲取卡啰。

測試結(jié)果:

QQ截圖20180505212409.png

關(guān)于反射的常見操作基本都在這里静稻,總之了,多多練習(xí)匈辱,有句話說得好振湾,多讀源代碼,對身體好梅誓,老鐵們你們懂得了G∩摇!9j嵌言!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市及穗,隨后出現(xiàn)的幾起案子摧茴,更是在濱河造成了極大的恐慌,老刑警劉巖埂陆,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苛白,死亡現(xiàn)場離奇詭異,居然都是意外死亡焚虱,警方通過查閱死者的電腦和手機购裙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹃栽,“玉大人躏率,你說我怎么就攤上這事。” “怎么了薇芝?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵蓬抄,是天一觀的道長。 經(jīng)常有香客問我夯到,道長嚷缭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任耍贾,我火速辦了婚禮阅爽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逼争。我一直安慰自己优床,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布誓焦。 她就那樣靜靜地躺著,像睡著了一般着帽。 火紅的嫁衣襯著肌膚如雪杂伟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天仍翰,我揣著相機與錄音赫粥,去河邊找鬼。 笑死越平,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秦叛。 我是一名探鬼主播瀑粥,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼避咆!你這毒婦竟也來了修噪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤樊销,失蹤者是張志新(化名)和其女友劉穎现柠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比然,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡强法,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年湾笛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖墅。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡论矾,死狀恐怖杆勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚜退,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布蚂且,位于F島的核電站膘掰,受9級特大地震影響佳遣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜零渐,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一诵盼、第九天 我趴在偏房一處隱蔽的房頂上張望银还。 院中可真熱鬧蛹疯,春花似錦、人聲如沸捺弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陌选,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間香浩,已是汗流浹背臼勉。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工宴霸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膏蚓,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓氓扛,卻偏偏與公主長得像论笔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒜埋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,766評論 0 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理整份,服務(wù)發(fā)現(xiàn),斷路器火俄,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,392評論 8 265
  • 普通人和牛人的區(qū)別在哪里?大約是牛人能做普通人做不了的事兒卸例,另一個是做到了普通人做不到的事兒,一個是能力筷转,一個是結(jié)...
    牛糞茶壺閱讀 1,309評論 33 21
  • 01 林宥嘉在《心酸》里唱: 走不完的長巷呜舒,原來也就那么長。跑步完的操場袭蝗,原...
    阿羊ai閱讀 280評論 0 1