Java反射

public class MyTest  {  
  
    public int a;  
  
    public static int b;  
  
    public static final int c = 0;  
  
    private int d;  
  
} 

1. 修飾符

public static void main(String[]args) {  
  
       Class<?> clazz = MyTest.class;  
  
       Field[] fields = clazz.getDeclaredFields();  
  
       for(Field field : fields)   {  
  
           System.out.print(field.getName() +"->");  
  
           System.out.println(field.getModifiers());  
  
       }  
  
    }  

輸出:

a->1
b->9
c->25
d->2

  • 通過返回的int類型的值胚泌,還是很難判斷這些變量有哪些修飾符蚁袭。

    在這里鱼响,需要用到java.lang.reflect.Modifier這個類。Modifier提供了很多靜態(tài)方法沟突。如public static String toString(int mod)就可以輸出該整數(shù)對應(yīng)的所有的修飾符花颗。public static boolean isPublic(int mod)就可以判斷該整數(shù)對應(yīng)的是不是包含public修飾符。

public static void main(String[] args) {  
  
       Class<?> clazz = MyTest.class;  
  
       Field[] fields = clazz.getDeclaredFields();  
  
       for(Field field : fields)   {  
  
           System.out.print(field.getName() +"->");  
  
           System.out.println(Modifier.toString(field.getModifiers()));  

       }  
  
    }  

輸出:

a->public
b->public static
c->public static final
d->private

通過Modifier的isPublic惠拭、isPrivate扩劝、isStatic等方法,可以判斷是否包含某些修飾符职辅,現(xiàn)在如果有這么一個需求今野,我需要找到僅有public static兩個修飾符的變量。

現(xiàn)在看下Modifier的源碼罐农,可以看到以下代碼:
public static final int PUBLIC           = 0x00000001;  
  
public static final int PRIVATE          =0x00000002;  
  
public static final int PROTECTED        = 0x00000004;  
  
public static final int STATIC           =0x00000008;  
  
public static final int FINAL            =0x00000010;  
  
public static final int SYNCHRONIZED     = 0x00000020;  
··· native transient volatile synchronized final static protected private public
0 0 0 0 0 0 1 0 0 1

把它們轉(zhuǎn)換成二進(jìn)制条霜,可以看出,Modifier使用一個二進(jìn)制的位來表示是否包含某個修飾符涵亏。
如果是public static宰睡,對應(yīng)的整數(shù)就是二進(jìn)制的:1001蒲凶,也就是9。如下圖:

··· native transient volatile synchronized final static protected private public
0 0 0 0 0 0 1 0 0 1

如果是public static final就是11001拆内,也就是25旋圆。
現(xiàn)在如果想判斷是否僅有public static兩個修飾符,那么就可以判斷是否field.getModifiers() == 9麸恍。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灵巧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抹沪,更是在濱河造成了極大的恐慌刻肄,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融欧,死亡現(xiàn)場離奇詭異敏弃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)噪馏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門麦到,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人欠肾,你說我怎么就攤上這事瓶颠。” “怎么了刺桃?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵粹淋,是天一觀的道長。 經(jīng)常有香客問我虏肾,道長廓啊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任封豪,我火速辦了婚禮谴轮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吹埠。我一直安慰自己第步,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布缘琅。 她就那樣靜靜地躺著粘都,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刷袍。 梳的紋絲不亂的頭發(fā)上翩隧,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音呻纹,去河邊找鬼堆生。 笑死专缠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淑仆。 我是一名探鬼主播涝婉,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔗怠!你這毒婦竟也來了墩弯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤寞射,失蹤者是張志新(化名)和其女友劉穎渔工,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怠惶,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涨缚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年轧粟,在試婚紗的時候發(fā)現(xiàn)自己被綠了策治。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡兰吟,死狀恐怖通惫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情混蔼,我是刑警寧澤履腋,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站惭嚣,受9級特大地震影響遵湖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晚吞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一延旧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧槽地,春花似錦迁沫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缅糟,卻和暖如春挺智,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗宦。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工赦颇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谣辞,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓沐扳,卻偏偏與公主長得像泥从,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沪摄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • 一躯嫉、Java 反射機(jī)制 參考了許多博文,總結(jié)了以下個人觀點(diǎn)杨拐,若有不妥還望指正: Java 反射機(jī)制在程序運(yùn)行時祈餐,對...
    野夢M閱讀 464評論 0 1
  • Java反射 概述 Java反射機(jī)制可以讓我們在編譯期(Compile Time)之外的運(yùn)行期(Runtime)檢...
    Leocat閱讀 1,129評論 0 0
  • Java反射機(jī)制 前言 網(wǎng)頁版的jdk的API離線版API 什么是反射機(jī)制 反射是java語言的一個特性,它允程序...
    愛撒謊的男孩閱讀 346評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法哄陶,類相關(guān)的語法帆阳,內(nèi)部類的語法,繼承相關(guān)的語法屋吨,異常的語法蜒谤,線程的語...
    子非魚_t_閱讀 31,599評論 18 399
  • 反射定義 JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個類至扰,都能夠知道這個類的所有屬性和方法鳍徽;對于任意一個對象,都能...
    mm_cuckoo閱讀 251評論 0 2