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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙浩迪 中级黑马   /  2012-6-23 16:42  /  1044 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sunhaodi 于 2012-6-23 22:38 编辑

package day01;

import java.lang.reflect.Field;

public class ReflectDemo {

          public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
               
                  Person p = new Person(3,4);
                  
                    //Field filedx   = p.getClass().getField("x");
                    
                    //System.out.println(filedx.get(p)); //这个代码我和张孝祥老师写的一样, 为什么运行不出来会报错啊
                  
                  
//                       Field filedy= p.getClass().getDeclaredField("y");
                       
//                       filedy.setAccessible(true);
                       
//                       System.out.println(filedy.get(p));
                     getTest(p);
                     
                     System.out.println(p);
        }
         
         public static  void  getTest(Object  obj) throws IllegalArgumentException, IllegalAccessException{  //这个方法把aaaaa改成bbbbbbb 为什么弄完了也没改啊还是aaaaaaaaaa
                 
                          Field[] fileds=obj.getClass().getFields();
                 
                          for (Field field : fileds) {
                                       
                                  if(field.getType()==String.class){
                                          String  s =(String) field.get(obj);
                                          String value=s.replace('a','b');
                                          
                                          field.set(obj, value);
                                          
                                  }
                                   
                                }
                 
                 
         }
         
        
}

class Person{
        
        private int x;
        private int y;
        
        private String  str1 = "aaaaaaa";
        private String  str2 ="ddddddd";
        public Person(int x, int y) {
                super();
                this.x = x;
                this.y = y;
        }
        
        
        
        @Override
        public String toString() {
                // TODO Auto-generated method stub
                return str1+".............."+str2;
        }
        
        
}

代码和老师的一样啊,郁闷了

2 个回复

倒序浏览
str1权限设置为public  就可以了 希望楼主看教程认真点

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 正解~

查看全部评分

回复 使用道具 举报
本帖最后由 陈嘉宾 于 2012-6-23 17:02 编辑

class Person{
        
        private int x;
        private int y;
        
        private String  str1 = "aaaaaaa";
        private String  str2 ="ddddddd";
        public Person(int x, int y) {
                super();
                this.x = x;
                this.y = y;
        }
        
        
        
        @Override
        public String toString() {
                // TODO Auto-generated method stub
                return str1+".............."+str2;
        }
        
        
}
这里是私有的所以要用爆力反射,所以你第一个打印不出来用暴力反射的方法public String  str1 = "aaaaaaa";        public String  str2 ="ddddddd";这里你改成私有的当然访问不到了,改成public






评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马