看了很多有关反射的文章,我想问一下有关反射的优点?
在程序中我们可以用关键字new来创造类对象,从而拿到类的属性与方法。反射也是从类里面拿属性与方法。
他们之间有什么区别吗?用关键字new可以做到的事情,为什么要用反射来做呢?

解决方案 »

  1.   

    看了这么多反射的文章还不没了解反射的意图...
       反射是提供了一种获取类的有关信息的手段. 创建对象的时候, 如果明确知道是哪个类 然就毫不犹豫new,何必拐弯抹角的。
      

  2.   

    你 new 一个对象时是明确知道它是什么类,有什么方法.
    但如果你根本就不知道它是什么类时就可以用反射,你可以去猜它都有什么方法.
      

  3.   

    通常连接数据库我们经常会用到
    Class.forName("driver名字");
    这个可以理解为反射的机制。
    反射的好处就是你可以去尝试访问一些不一定真实存在的类而系统能够编译通过。因为它是运行时才能知道的
    但你直接new 一个类是编译期就知道的。
    例如你的代码中引用了一个JDK 6特有的接口,但你不知道实际客户的机器上安装的是不是JDK 6,这时你就可以通过反射满足你的需要了。
      

  4.   

    举个例子:我现在获取一个字符串参数,我要获得以这个字符串未类名的类实例 
    怎么做?new 一个字符串?Class.forName()就很好用 呵呵
    这个获取配置文件中的数据库驱动名很常用
      

  5.   

    你可以通过类名获得类里面的属性类型,调用类的方法。我们的数据库连接就使用了反射调用jdbc中实现数据库连接的类
      

  6.   

    在工厂模型中,大量用到反射
    举三个例子:
    1、用 hibernate 翻页
    如果是 mysql 数据库,调用的函数是 select * from table limit 10,21
    oracle 是用子查询 那么 hibernate 可以通过配置文件,来判断是调用哪一个语句,
    也就是通过反射,调用具体的实现类(多态)2、动物的移动方式
    猫用脚走,鸟用翅膀飞我们只需要在配置文件里指定具体的名称(猫或鸟),就能得到该动物是如何移动的3、某个游戏发布资料篇,需要增加古典风格的建筑
    那就只需要修改配置文件,并且加上实现某接口的实现类,就能达到目标
    而不用全部修改
      

  7.   

    new 是编写程序的时候你知道要加载那个类.
    反射 就是你当时不知道要加载什么类.