afrag  
记录学习和成长的历程
日历
<2005年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
统计
  • 随笔 - 9
  • 文章 - 5
  • 评论 - 2
  • 引用 - 0

导航

常用链接

留言簿

随笔分类

随笔档案

文章档案

搜索

  •  

积分与排名

  • 积分 - 10049
  • 排名 - 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 阅读(705) 评论(0)  编辑  收藏 所属分类: Java 技术

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © afrag Powered by: 博客园 模板提供:沪江博客