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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑雪 中级黑马   /  2013-5-5 18:47  /  1470 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于反射的问题一直不是很清楚,什么时候会用到反射呢?


4 个回复

倒序浏览
我想说。我从来没用过。在框架中用的也比较少,因为都是现成的。除非你接触的东西比较底层。应用层的话基本不用。
回复 使用道具 举报
做基础框架的时候会用得上,一般应用层面很少,不过这种东西,基本现在很多开源框架都已经给你封装好了,自己基本用不着写。典型的除了楼上讲的Hibernate之外,其实Spring也用到了。经典的就是xml或者properties里面写上了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射,根据这个字符串获得某个类的实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。总的来说,自己写的很少,具体什么时候要用那要看需求,楼上说得对,无非就是根据一个String来得到你要的实体对象,然后调用它原来的东西。但是如果是要自己写框架的话,那就会用得比较多了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果想了解一下反射原理 可以去试着写下 struts1的框架模式
主要集中在 Action类 和 DispatchAction   ActionFrom
回复 使用道具 举报
Java 反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法。

Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

下面给你提供一个例子 你看下
  1. public class RefFiled {
  2.     public double x;
  3.     public Double y;
  4.  
  5.     public static void main(String args[]) throws NoSuchFieldException, IllegalAccessException {
  6.         Class c = RefFiled.class;
  7.         Field xf = c.getField("x");
  8.         Field yf = c.getField("y");
  9.  
  10.         RefFiled obj = new RefFiled();
  11.  
  12.         System.out.println("变更前x=" + xf.get(obj));
  13.         //变更成员x值
  14.         xf.set(obj, 1.1);
  15.         System.out.println("变更后x=" + xf.get(obj));
  16.  
  17.         System.out.println("变更前y=" + yf.get(obj));
  18.         //变更成员y值
  19.         yf.set(obj, 2.1);
  20.         System.out.println("变更后y=" + yf.get(obj));
  21.     }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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