说说Java的反射


<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
不想当将军的士兵不是好士兵,不想当高手的程序员不是好的程序员,
今天和大家说说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 是用来描述某个类中单个方法的一个类
 
注:反射的功能很强大,大家可以去看看相关的文档的,我上面只是讲了基本的概念,让大家有个了解,想要练成高手还要看自己的努力
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值