最近在看JAVA的反射机制,不过想来想去都不知道在实践工作中有什么用或用在那里,所以想请教一下各位知不知道呢?

解决方案 »

  1.   

    写工具用, 比如IDE为什么能代码提示, 就是能通过反射分析你写的类
      

  2.   

    反射也就是说,在编译时,你获取了一个指向某个并不存在你的程序空间中的对象的引用;
    事实上在编译时你的程序无法获知这个对象所属的类.java附带的库java.lang.reflect包含了FIeld,Method,Constructor类.这些类型的对象
    是由jvm在运行时创建的,用以表示未知类里对应的成员.你就可以使用Constructor创建
    新的对象,用get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用
    与Method对象关联的方法.反射常用在类的反向控制,例如AOP建议楼主去查查api
      

  3.   

    反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
      

  4.   

    import java.lang.reflect.*;
    public class DumpMethods {
        public static void main(String args[]) {
            try {
                Class c = Class.forName(args[0]);
                Method m[] = c.getDeclaredMethods();
                for (int i = 0; i < m.length; i++)
                    System.out.println(m[i].toString());
            } catch (Throwable e) {
                System.err.println(e);
            }
        }
    }按如下语句执行:java DumpMethods java.util.Stack它的结果输出为:public java.lang.Object java.util.Stack.push(java.lang.Object)public synchronized java.lang.Object java.util.Stack.pop()public synchronized java.lang.Object java.util.Stack.peek()public boolean java.util.Stack.empty()public synchronized int java.util.Stack.search(java.lang.Object)这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。