说说Java的反射

不想当将军的士兵不是好士兵,不想当高手的程序员不是好的程序员,
今天和大家说说Java中的反射机制吧,和高手又接近一步了.
1.什么是反射??
反射指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实例、或对其fields设值、或唤起其methods1。这种“看透class”的能力(the ability of the program to
examine itself)被称为introspection(内省、内观、反省)。
2.反射与RTTI
RTTI在编译的时候打开和检查.class文件;
反射在运行时打开和检查.class文件.
 
3.如何使用Java的反射
第一步:获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等
第二步:调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表
第三步:使用 reflection API 来操作这些信息
 
 
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 是用来描述某个类中单个方法的一个类
 
注:反射的功能很强大,大家可以去看看相关的文档的,我上面只是讲了基本的概念,让大家有个了解,想要练成武林高手还要看自己的努力
posted @ 2012-03-22 17:41  yunxiange  阅读(1069)  评论(0编辑  收藏  举报