A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陆杨 黑马帝   /  2011-8-5 10:26  /  1900 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

成员变量的反射,视频上的代码我也基本上明白什么意思了:发现一个有趣的地方:
public class Main {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception
        {
                ReflectPoint pt = new ReflectPoint();
                changString(pt);
                System.out.println(pt);
        }
       
        public static void changString (Object obj)throws Exception
        {
                Field[] fields = obj.getClass().getFields();
                for (Field field :fields){
                        if (field.getType()==String.class){
                                String oldString = (String)field.get(obj);
                                String newString = oldString.replace('b', 'a');
                                field.set(obj, newString);
                        }
                }
        }
}这个是主类。
public class ReflectPoint
{
        public  String a = "ball";
        public String b = "basketball";
        public String c = "Six";
        public ReflectPoint()
        {
        }
        @Override
        public String toString() {
                return "ReflectPoint [a=" + a + ", b=" + b + ", c=" + c + "]";
        }
}这个是第二个类。
这样运行时输出的就是  :ReflectPoint [a=aall, b=aasketaall, c=Six]
但是如果第二个类里面String前面的public 都拿掉那么
运行结果: ReflectPoint [a=ball, b=basketball, c=Six]  程序就不修改String了。
接着我百度了下访问权限 :
public          全部可见
protected       子类可见
default         包内可见
private         本类可见
如果成员变量前没有修饰的话应该是default包内可见。而我的两个类是属于同一个包
为什么访问不到?

1 个回复

倒序浏览
黑马网友  发表于 2011-8-5 17:45:08
沙发
我想大概是因为那个getfields只能得到public修饰的字段吧,你可以用获得所有自段的方法测试下.另外成员字段一般是私有的,开发的时候别这样写哈,老方说,咱都是有经验的开发人员
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马