麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

Java 反射之私有字段和方法詳細介紹

2019-11-26 16:17:51
字體:
來源:轉載
供稿:網友
盡管我們通常認為通過JAVA的反射機制來訪問其它類的私有字段和私有方法是可行的,其實并沒有那么困難。
注釋:只有在單獨的JAVA程序中運行該代碼才有效,就像你做一些單元測試或者常規的程序。如果你嘗試在JAVA APPLET內使用該方法,你需要稍稍修改SecurityManager。但是,因為你不是經常需要與它打交道,這里也就不再贅述了。
這里是本次內容的列表:
1.訪問私有字段。
2.訪問私有方法。
訪問私有字段:
為了訪問私有字段,你需要調用Class.getDeclaredField(String name)或者Class.getDeclaredFields()方法。方法Class.getField(String name)和Class.getFields()僅僅返回共有的字段,所以它們都無法起到作用。這里有一個例子,該例子中有一個包含私有字段的類,在該類下面有通過反射訪問私有字段的代碼。
復制代碼 代碼如下:

public class PrivateObject {
private String privateString = null; //聲明為私有字段
public PrivateObject(String privateString) {
this.privateString = privateString;
}
}

復制代碼 代碼如下:

PrivateObject privateObject = new PrivateObject("The Private Value");//實例化對象
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);//允許訪問私有字段
String fieldValue = (String) privateStringField.get(privateObject);//獲得私有字段值
System.out.println("fieldValue = " + fieldValue);

這個代碼會打印出文本"fieldValue = The Private Value",而該值正好是對象PrivateObject的私有字段privateString的值。
注意到我們使用了方法PrivateObject.class.getDeclaredfield("privateString")。正是這個調用這個方法返回了私有字段。這個方法僅僅根據指定的類返回字段,不會返回父類申明的字段。
另外仔細觀察加粗的語句。通過調用 Field.setAccessible(true),你關掉了對于這個指定字段實例的訪問檢查,僅僅對反射有效。現在你能訪問它了,不管它是私有的,保護的或是默認的(default),即時調用者并不在該范圍中。你仍然不能通過常規方法訪問該字段,因為編譯器不允許。
訪問私有方法
為了訪問一個私有方法,你需要調用Class.getDeclaredMethod(String name,Class[] parameterTypes)或者Class.getDeclaredMethods()方法。方法Class.getMethod(String name,Class[] parameterTypes)和Class.getMethods()僅僅返回公有方法,所以它們不會起到作用。下面是一個簡單的例子,該例子中有一個擁有私有方法的類,類下面是通過反射機制訪問私有方法的代碼。
復制代碼 代碼如下:

public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
private String getPrivateString(){//私有方法
return this.privateString;
}
}

復制代碼 代碼如下:

PrivateObject privateObject = new PrivateObject("The Private Value");
Method privateStringMethod = PrivateObject.class.
getDeclaredMethod("getPrivateString", null);
privateStringMethod.setAccessible(true);
String returnValue = (String)
privateStringMethod.invoke(privateObject, null);
System.out.println("returnValue = " + returnValue);

這個代碼例子會打印出文本"returnValue = The private Value",該值正好是私有方法的返回值。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲aⅴ免费在线观看 | 中文字幕综合 | 国产永久免费观看 | 色人久久 | 全黄性色大片 | 日本娇小videos高潮 | 成人9禁啪啪无遮挡免费 | 精品一区二区三区免费毛片爱 | 素人视频免费观看 | 久久久久国产成人精品亚洲午夜 | 色欲香天天天综合网站 | 亚洲国产成人久久一区www妖精 | 91久久久久久久 | 国产精品成人久久 | 黑人一级片视频 | 经典三级在线视频 | 精国品产一区二区三区有限公司 | 91看片免费版 | 亚洲日韩精品欧美一区二区 | 一级黄色在线观看 | 国产亚洲黑人性受xxxx精品 | 欧美1区2区在线观看 | 久久网一区二区 | 91羞羞 | 久久久一区二区三区四区 | 三级国产三级在线 | 高清在线国产 | omofun 动漫在线观看 | 成人性生活视频在线播放 | 国产一区二区三区视频在线观看 | 国产精品一区二区x88av | 日韩毛片在线看 | v片在线看| 一级看片免费视频 | 爱福利视频| 久久国产秒 | 99re色 | 欧美人的天堂一区二区三区 | av手机在线电影 | 国产亚洲精品久久午夜玫瑰园 | 久草最新|