黑马程序员技术交流社区

标题: 反射。。。 [打印本页]

作者: 孙浩迪    时间: 2012-6-23 16:42
标题: 反射。。。
本帖最后由 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;
        }
        
        
}

代码和老师的一样啊,郁闷了
作者: 马林康    时间: 2012-6-23 16:45
str1权限设置为public  就可以了 希望楼主看教程认真点
作者: 陈嘉宾    时间: 2012-6-23 16:58
本帖最后由 陈嘉宾 于 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











欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2