afrag  
          記錄學習和成長的歷程
          日歷
          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345
          統計
          • 隨筆 - 9
          • 文章 - 5
          • 評論 - 2
          • 引用 - 0

          導航

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          積分與排名

          • 積分 - 10198
          • 排名 - 2381

          最新評論

          閱讀排行榜

          評論排行榜

           

          今天在看Spring in Action,看到了一個很有意思的例子。
          假如你編寫了一個類:

          public class ClassA{
          ??????private String fieldA;

          ??????public ClassA(){
          ?????????fieldA = "This is Class A";
          ???? }

          ??????public myPrint(){
          ????????????System.out.println(fieldA);
          ??????}
          }

          OK。按照面向對象的思想,其他的類應該不能夠修改ClassA的fieldA字段吧?因此無論什么時候你調用ClassA的myPrint方法,都應該打印的是“This is Class A”。
          ??????但是,實際情況并不是如此,請看下面的例子:
          import java.lang.reflect.Field;
          public class? TestChangeApp
          {
          ????public static void main(String[] args)
          ????{
          ????????System.out.println("Begin to test change.");
          ????????ClassA test = new ClassA();
          ????????test.myPrint();

          ????????Field[] fields = test.getClass().getDeclaredFields();
          ??
          ????????try
          ????????{
          ????????????for (int i=0;i????????????{
          ??????????????? if (fields[i].getType().equals(java.lang.String.class)){
          ???????????????????fields[i].setAccessible(true);
          ???????????????????fields[i].set(test, "This field have been changed!");
          ???????????????}
          ????????????}
          ???
          ????????}
          ????????catch (Exception e)
          ????????{
          ????????}

          ????????test.myPrint();
          ????}
          }
          運行結果是什么呢?是
          Begin to test change.
          This is ClassA
          This field have been changed!
          也就是說,在TestChangeApp類中,可以修改ClassA的私有成員變量。

          posted on 2005-10-29 16:26 afrag 閱讀(716) 評論(0)  編輯  收藏 所屬分類: Java 技術
           
          Copyright © afrag Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 赤城县| 横峰县| 永福县| 蒲城县| 宝丰县| 阿克陶县| 平远县| 阿巴嘎旗| 德格县| 乡宁县| 讷河市| 苏州市| 祁门县| 石台县| 如皋市| 绥中县| 灌云县| 乌苏市| 历史| 大厂| 咸宁市| 枣强县| 福贡县| 古田县| 台北县| 洪江市| 通化市| 柳州市| 西城区| 淅川县| 东乡族自治县| 桓仁| 蓬莱市| 凭祥市| 五峰| 前郭尔| 盐山县| 大城县| 杨浦区| 庐江县| 松溪县|