黑马程序员技术交流社区

标题: 继续反射 [打印本页]

作者: 陈文杰    时间: 2013-11-19 00:54
标题: 继续反射
反射机制和反射一样的么。

作者: RuntimeError!    时间: 2013-11-19 04:30
反射就是用定义好的一种方法来获取一个类内部组成的一种方法,能让我们更明确的使用一种类,或者完成一个正常调用完成不了的一些事。
例如这段代码 就可以修改对象X中的private的值。。
Field fieldX=pt1.getClass.getDeclaredField(x);  
fieldX.setAccessible(true);  
复制代码
还有把一个对象的类中所有的字符串中的一个字母改成另外的字母,只对这个对象有效
  1. import java.lang.reflect.Field;  
  2.   
  3.   
  4. /**
  5. * 作业:将任意一个对象中的所有String类型的成员变量所对应的
  6. * 字符串内容中的“b”改成“a”。
  7. * @author yupengfei
  8. *
  9. */  
  10. public class ReflectHomework   
  11. {  
  12.     public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException   
  13.     {  
  14.          
  15.         RefPoint pt1 = new RefPoint(9);  
  16.         RefPoint pt2 = new RefPoint(5);  
  17.         changeStrValue(pt1);  
  18.         System.out.println(pt1);  
  19.         //这里试着看别的成员变量的字符串是否被更改  
  20.         System.out.println(pt2);  
  21.          
  22.     }  
  23.   
  24.   
  25.     private static void changeStrValue(Object obj) throws IllegalArgumentException, IllegalAccessException  
  26.     {  
  27.         Field[] fields = obj.getClass().getFields();  
  28.         for(Field field : fields)  
  29.         {  
  30.             //这里用 == 因为是字节码比较,所以用等号比较好  
  31.             if(field.getType() == String.class)  
  32.             {  
  33.                 String strValue = (String)field.get(obj);  
  34.                 String newValue = strValue.replace('b', 'a');  
  35.                 field.set(obj, newValue);  
  36.             }     
  37.               
  38.         }  
  39.     }  
  40. }  
  41. class RefPoint  
  42. {  
  43.     int x = 3;  
  44.     public String str1 = "basic";  
  45.     public String str2 = "babyGo!";  
  46.     public String str3 = "lalala";  
  47.     public RefPoint(int x)  
  48.     {  
  49.         this.x=x;  
  50.     }  
  51.     @Override  
  52.         //用于分割显示每个字符串  
  53.     public String toString()  
  54.     {  
  55.         return str1 + ":" +str2+":" + str3;  
  56.     }  
  57. }  
复制代码





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