1 / 36
文档名称:

java教学0韩建雷java反射机制.pptx

格式:pptx   大小:175KB   页数:36页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

java教学0韩建雷java反射机制.pptx

上传人:wz_198613 2018/11/26 文件大小:175 KB

下载得到文件列表

java教学0韩建雷java反射机制.pptx

文档介绍

文档介绍:议程
概述
主要功能
分析类
取得Class 对象
取得类名
找出超类
确定某类实现的接口
检查接口
取得类字段
取得构造方法
取得方法信息
取得字段的值
创建对象
库文档分享
概述
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。
Reflection是一系列的API,它用于表示或者处理当前JVM中的类,接口和对象。
库文档分享
主要功能
确定一个对象的类
取出类的modifiers,数据成员,方法,构造器和超类
找出某个接口里定义的常量和方法说明
创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象)
取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做倒。
在运行时刻调用动态对象的方法
创建数组,数组大小和类型在运行时刻才确定。也能更改数组成员的值。
库文档分享
分析类
如果你在编一个类浏览器程序,你就需要取得类在运行时刻的有关信息。比如,你想显示某个类的数据成员名,方法和构造器。再比如,你想显示某个类到底实现了哪些接口。这些信息可以由自省此类的Class对象来取得。
对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个类的有关信息。你可以通过调用Class对象的有关方法,返回特定类的构造器对象,方法对象和数据成员对象。通过这些返回的对象,你就可以得到构造器,方法和数据成员的所有详细原始定义。
Class对象也包含接口信息。你可以调用Class对象的某些方法来取得某接口的modifiers,方法和公共常数。如果Class对象用来表示接口,那么Class对象的部份方法就不可用。比如getConstructors,接口根本没构造器,所以这个方法就没用。
库文档分享
取得Class对象
如果可以取得某个类的实例,。
请看例子:
mystery是某个类的对象。
Class c = ();
类对象c可以直接输出,请看
JButton jb=new JButton();
Class mc= () ;
("类内容"+() );
如果你想取得某个类对象的超类,可以用getSuperclass方法。本例中,ponent的Class对象,类是TextField的超类。
TextField t = new TextField();
Class c = ();
Class s = ();
运行后直接输出c和s的结果是:
本类内容class
超类内容class
库文档分享
如果你知道类在编译时的名字(类名),取出它的class对象就简单了:类名后跟“.class”后缀就行了。如:
Class c1 = ;
("本类内容+() );
有时候,在编译的时候,对象属于哪个类,类名不知道(多态性),但是在运行的时候就知道对象属于哪个类了(运行时刻绑定)。这时候运行时刻取得对象的类就应该用forName方法。在下例中,如果字串变量strg内容是””,那么用forName方法返回Button的Class 对象。
如:
库文档分享
String strg="";
Class c2;
c2=null;
try
{
c2= (strg) ;
}
catch(ClassNotFoundException e)
{
("没有这个类");
(1);
}
("forName 内容"+() );
库文档分享
取得类名
每个类都有类名,比如下面的类名就是Point
public class Point {int x, y;}
在运行时刻,类名可以调用Class对象的getName方法来取得。getName返回一个字串,字串是完整的类名。
下面举例:例子首先取得对象的Class对象,然后调用getName得到类名。
库文档分享
import