氟塑料離心泵www.buybeng.com

          jquery教程http://www.software8.co/wzjs/jquery/

          Java 反射: 私有字段和方法

          盡管我們通常認為通過JAVA的反射機制來訪問其它類的私有字段和私有方法是可行的,其實并沒有那么困難。

          注釋:只有在單獨的JAVA程序中運行該代碼才有效,就像你做一些單元測試或者常規的程序。如果你嘗試在JAVA APPLET內使用該方法,你需要稍稍修改SecurityManager。但是,因為你不是經常需要與它打交道,這里也就不再贅述了。

          這里是本次內容的列表:

          1. 訪問私有字段。

          2. 訪問私有方法。


          訪問私有字段:

          為了訪問私有字段,你需要調用Class.getDeclaredField(String name)或者Class.getDeclaredFields()方法。方法Class.getField(String name)和Class.getFields()僅僅返回共有的字段,所以它們都無法起到作用。這里有一個例子,該例子中有一個包含私有字段的類,在該類下面有通過反射訪問私有字段的代碼。


          1. public class PrivateObject {  
          2.   
          3.   private String privateString = null;   //聲明為私有字段  
          4.   //www.software8.co
          5.   public PrivateObject(String privateString) {  
          6.     this.privateString = privateString;  
          7.   }  
          8. }  

          1. PrivateObject privateObject = new PrivateObject("The Private Value");//實例化對象  
          2.   
          3. Field privateStringField = PrivateObject.class.  
          4.             getDeclaredField("privateString");  
          5.   
          6. privateStringField.setAccessible(true);//允許訪問私有字段  
          7.   //www.heatpress123.net
          8. String fieldValue = (String) privateStringField.get(privateObject);//獲得私有字段值  
          9. System.out.println("fieldValue = " + fieldValue);  

          這個代碼會打印出文本"fieldValue = The Private Value",而該值正好是對象PrivateObject的私有字段privateString的值。

          注意到我們使用了方法PrivateObject.class.getDeclaredfield("privateString")。正是這個調用這個方法返回了私有字段。這個方法僅僅根據指定的類返回字段,不會返回父類申明的字段。

          另外仔細觀察加粗的語句。通過調用 Field.setAccessible(true),你關掉了對于這個指定字段實例的訪問檢查,僅僅對反射有效?,F在你能訪問它了,不管它是私有的,保護的或是默認的(default),即時調用者并不在該范圍中。你仍然不能通過常規方法訪問該字段,因為編譯器不允許。


          訪問私有方法

          為了訪問一個私有方法,你需要調用Class.getDeclaredMethod(String name,Class[] parameterTypes)或者Class.getDeclaredMethods()方法。方法Class.getMethod(String name,Class[] parameterTypes)和Class.getMethods()僅僅返回公有方法,所以它們不會起到作用。下面是一個簡單的例子,該例子中有一個擁有私有方法的類,類下面是通過反射機制訪問私有方法的代碼。

          1. public class PrivateObject {  
          2.   
          3.   private String privateString = null;  
          4.   
          5.   public PrivateObject(String privateString) {  
          6.     this.privateString = privateString;  
          7.   }  
          8.   
          9.   private String getPrivateString(){//私有方法  
          10.     return this.privateString;  
          11.   }  
          12. }  

          1. PrivateObject privateObject = new PrivateObject("The Private Value");  
          2.   
          3. Method privateStringMethod = PrivateObject.class.  
          4.         getDeclaredMethod("getPrivateString", null);  
          5.   
          6. privateStringMethod.setAccessible(true);  
          7.   
          8. String returnValue = (String)  
          9.         privateStringMethod.invoke(privateObject, null);  
          10.       
          11. System.out.println("returnValue = " + returnValue);  

          這個代碼例子會打印出文本"returnValue = The private Value",該值正好是私有方法的返回值。

          posted on 2012-11-26 11:47 你爸是李剛 閱讀(1166) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          技術網站

          行業網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          站長網 氟塑料離心泵 注塑機 液晶廣告機
          主站蜘蛛池模板: 稷山县| 天峻县| 静宁县| 公安县| 青海省| 丹寨县| 进贤县| 荣昌县| 静安区| 洛阳市| 汕头市| 九龙县| 新乐市| 深泽县| 乌兰察布市| 乌鲁木齐县| 襄汾县| 阿拉尔市| 抚宁县| 西和县| 威信县| 梓潼县| 罗源县| 灵川县| 休宁县| 新干县| 鄂托克前旗| 玉屏| 临澧县| 托克托县| 庄浪县| 卢龙县| 龙游县| 长宁县| 平遥县| 辉县市| 靖西县| 古浪县| 临城县| 长阳| 赣榆县|