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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈文杰 中级黑马   /  2013-11-18 23:56  /  1143 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于反射能给个通俗的说法么,定义看的头晕

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 可能你的问题问得不够清楚~~~

查看全部评分

3 个回复

倒序浏览
能当成膝跳反应么
回复 使用道具 举报
反射就是用定义好的一种方法来获取一个类内部组成的一种方法,能让我们更明确的使用一种类,或者完成一个正常调用完成不了的一些事。
例如这段代码 就可以修改对象X中的private的值。。
  1. Field fieldX=pt1.getClass.getDeclaredField(x);  
  2. 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. }  
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
反射:就是把Java类中的各种成分映射成相应的Java元素。
就是现实生活中 ,无论哪一种事物,事物内部还是由事物组成,反射就是将事物内部的成分定义成类。例如,汽车是由许多零件组成等等。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马