java reflection part 1
来源:互联网 发布:如何加入淘宝搜索引擎 编辑:程序博客网 时间:2024/06/07 21:05
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。 JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。 1. 一个简单的例子 考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。
它的结果输出为:
这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。 这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。 2.开始使用 Reflection 用于 reflection 的类,如 Method,可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤:第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等。 下面就是获得一个 Class 对象的方法之一: Class c = Class.forName("java.lang.String"); 这条语句得到一个 String 类的类对象。还有另一种方法,如下面的语句: Class c = int.class; 或者 Class c = Integer.TYPE; 它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。 第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。 一旦取得这个信息,就可以进行第三步了——使用 reflection API 来操作这些信息,如下面这段代码:
它将以文本方式打印出 String 中定义的第一个方法的原型。 在下面的例子中,这三个步骤将为使用 reflection 处理特殊应用程序提供例证。 模拟 instanceof 操作符 得到类信息之后,通常下一个步骤就是解决关于 Class 对象的一些基本的问题。例如,Class.isInstance 方法可以用于模拟 instanceof 操作符:
在这个例子中创建了一个 A 类的 Class 对象,然后检查一些对象是否是 A 的实例。Integer(37) 不是,但 new A()是。 3.找出类的方法 找出一个类中定义了些什么方法,这是一个非常有价值也非常基础的 reflection 用法。下面的代码就实现了这一用法:
这个程序首先取得 method1 类的描述,然后调用 getDeclaredMethods 来获取一系列的 Method 对象,它们分别描述了定义在类中的每一个方法,包括 public 方法、protected 方法、package 方法和 private 方法等。如果你在程序中使用 getMethods 来代替 getDeclaredMethods,你还能获得继承来的各个方法的信息。 取得了 Method 对象列表之后,要显示这些方法的参数类型、异常类型和返回值类型等就不难了。这些类型是基本类型还是类类型,都可以由描述类的对象按顺序给出。 输出的结果如下:
4.获取构造器信息 获取类构造器的用法与上述获取方法的用法类似,如:
这个例子中没能获得返回类型的相关信息,那是因为构造器没有返回类型。 这个程序运行的结果是:
|
- java reflection part 1
- java reflection part 2
- Reflection Part 1: Discovery and Execution
- Reflection Part 1: Discovery and Execution
- Java--Reflection 浅析1
- Reflection Part 2: Emit
- Java Reflection 教程(1): 概述
- Java Reflection
- Java Reflection
- Java Reflection
- Java Reflection
- java Reflection
- Java Reflection
- java reflection
- Java Reflection
- java reflection
- Java reflection
- Java Reflection
- SQL Server blocked access to procedure 'sys.xp_cmdshell' ...
- get static value of class by java reflection
- C++Builder下利用TImage制作二维条码PDF417打印控件(四)
- UDP 通讯及内部分析(合集)
- 结合ashx来在DataGrid中显示从数据库中读出的图片
- java reflection part 1
- 为ClipX设置粘帖热键(Alt+C)
- java reflection part 2
- 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法(转)
- 最近在为界面库中增加一个单独的换肤功能,自己记录下GDI渐变色的使用方法
- C++Builder下利用TImage制作二维条码PDF417打印控件(五)
- 数据库中两张表的各种连接方法
- ASP.NET 应用程序中的服务器错误 解决方法一则
- 转载:30 Minutes Flex Test-Drive for Java Developers