问一下
java 反射的妙处在哪?
能举个例子最好了

解决方案 »

  1.   

    在JAVA运行时的环境中,JAVA反射机制可以为我们动态获取类的信息及动态调用类的方法。
    反射机制是Java被视为动态语言的一个关键机制。
    反射机制提供了以下功能:
    在运行时判断任意一个实例所属的类。
    在运行时构造任意一个类的实例。
    在运行时判断任意一个类所具有的属性和方法
    在运行时调用任意一个实例的方法。
      

  2.   

    spring的源代码其基本原理如依赖注入、aop、以及xml技术,还有hibernate、javabean等都运用了java的动态反射的机制。
      

  3.   

      Reflection(反射) 是Java被视为动态语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。先来解释一下反射,反射是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)、方法名、属性等信息来生成对象、方法、属性。这种编程方式可以让对象在生成时才决定要生成哪一种对象。反射是一种强大的工具,Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。但反射的某些方面存在一些疑问。在本文中,我将深入讨论反射的利弊。在了解了权衡性分析之后,您可以自行决定是否利大于弊。
      

  4.   

    应该是在后期才会用到的吧,好像是说JavaBean之类的。
    反射本身的特点就是对运行的程序进行处理,虽然不知道什么时候能到,但以后总是有用的嘛。
      

  5.   

    我理解反射是编写程序工具时用到的。可以降低程序的耦合,比如说spring中的核心原理。框架,还有其它的类库,为了方便别人使用,基本上都用到了反射,不过在android这样硬件资源比较少的地方,基本上没见到用反射的。
      

  6.   

    用了反射你就可以不改核心代码代码的情况下通过其他方式(XML DB)配置来根据满足各种不同需求。就是解耦
      

  7.   

    传说中的SSH都大量应用了反射
      

  8.   


    package com.feilong.reflect;public class TestMain {
    public static void main(String[] args) {
    // Person person = new Person();
    // person.Hello();
    try {
    Class personClass = Class.forName("com.feilong.reflect.Person");
    Person person = (Person) personClass.newInstance();
    person.Hello();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }
    }这个是反射吧
      

  9.   

    看看ssh配置文件,哪些class type什么的都是指定了具体类,用反射就能动态调用
      

  10.   

    一个比较经典的例子是自动从JSP FORM表单获取所有属性,然后根据配置文件自动填充相应的java bean。
      

  11.   

    数不胜数。
    最简单的读数据库,如果没反射,将数据转成JavaBean的话要一个一个去setter,如果JavaBean多,就很头疼了,因为要为每个JavaBean写一个单独的读取方法。。
    有了反射就方便了,只要注意JavaBean的规范、数据库字段的规范,一个方法就搞定。
      

  12.   

    reflect可以让程序在编译时初始化对象实例。例如:
    import java.lang.reflect.Method;
    public class DumpMethod {
    public static void main(String[] args) throws ClassNotFoundException {
    Class<?> classType=Class.forName(args[0]); //获取从命令行中的class实例
    Method[] methods=classType.getDeclaredMethods(); //获取Class实例对象的所有申明方法。
    for (Method method : methods) {
    System.out.println(method);
    }
    }
    }比如:输入java.io.File
    输出结果:
    public int java.io.File.hashCode()
    public int java.io.File.compareTo(java.io.File)
    public int java.io.File.compareTo(java.lang.Object)
    public boolean java.io.File.equals(java.lang.Object)
    public java.lang.String java.io.File.toString()
    public java.lang.String java.io.File.getName()
    public long java.io.File.length()
    public java.lang.String java.io.File.getCanonicalPath() throws java.io.IOException
    public java.lang.String java.io.File.getParent()
    public boolean java.io.File.isAbsolute()
    private synchronized void java.io.File.writeObject(java.io.ObjectOutputStream) throws java.io.IOException
    public boolean java.io.File.setReadOnly()
    public java.lang.String[] java.io.File.list()
    public java.lang.String[] java.io.File.list(java.io.FilenameFilter)
    private synchronized void java.io.File.readObject(java.io.ObjectInputStream) throws java.io.IOException,java.lang.ClassNotFoundException
    public boolean java.io.File.delete()
    public boolean java.io.File.canExecute()
    public boolean java.io.File.canRead()
    public boolean java.io.File.canWrite()
    private static boolean java.io.File.checkAndCreate(java.lang.String,java.lang.SecurityManager) throws java.io.IOException
    public boolean java.io.File.createNewFile() throws java.io.IOException
    public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String,java.io.File) throws java.io.IOException
    public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String) throws java.io.IOException
    ..........(还有很多,我就不贴了。自己可以试试)
      

  13.   

    反射就是可以让你“动态”的编写代码,在运行期才知道你要加载的类是什么,对还是错,有还是无。
    而不是在编译时就报告。
    它的作用是为你提供了更加灵活的代码编写,就如楼上们说的解耦。当然同时也大大增加了代码的复杂度和出错的几率。
    所以一般只有你需要提供很抽象的功能时才会用到,比如框架程序,代表作spring。
    一个经典的例子就是jdbc,Class XXX = Class.forName("XXX.driver");
      

  14.   

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的热播一一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。\
    反射机制的主要功能:
    在运行时判断任意一个对象所属的类;
    在运行时构造任意一个类的对象;
    在运行时判断任意一个类所具有的成员变量和方法;
    在运行时调用任意一个对象的方法;
    生成动态代理。Java动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。struts开发网站中大量用到了反射机制。
      

  15.   

    知道反射怎么用的就自然知道什么时候用反射了!去看API吧!
      

  16.   

    能够在运行时创建类实例,调用类方法等操作。例如spring就是采用反射来实现,这样如果想要改变实现类,那么只要修改报名称就可以做到。