没有合适的资源?快使用搜索试试~ 我知道了~
java人家\Java第四十五讲总结-反射机制.doc
3星 · 超过75%的资源 需积分: 9 11 下载量 50 浏览量
2011-11-11
07:39:38
上传
评论
收藏 35KB DOC 举报
温馨提示
试读
3页
小贝程序员生活\课件\java\java人家\Java第四十五讲总结-反射机制.doc 小贝程序员生活\课件\java\java人家\Java第四十五讲总结-反射机制.doc 小贝程序员生活\课件\java\java人家\Java第四十五讲总结-反射机制.doc
资源推荐
资源详情
资源评论
第四十五节课:
Java 反射机制(reflection):
Java 中的反射机制是指动态地获取类的信息以及动态地调用对象的方法的功能;其中,
类的信息包括该类中所定义的属性、方法以及它们的修饰符等,还有该类所实现的接口或
超类等;这里所说的“动态地”是指在运行时执行这些操作,而不像以前所做的那样只是在
编译时执行的动作(就像多态中编译时指父类方法,而运行时值子类方法)。
动态语言的一个重要特性就是指在运行时可以为类追加或改变其属性和方法,java 语
言是一种准动态语言,reflection 是 java 语言被视为准动态语言的一个关键性质;java 中
lang 包下的 class 类的实例就代表一个正在运行的 java 应用程序中的类和接口,即代表一
个运行时类或接口,java 中的类、基本数据类型以及数组都有自己的 class 实例,不过
class 实例只有在一个类在运行时,即被 JVM 加载时才会产生一个该类的 class 实例。class
实例可以简称为类的类,前面的类指普通类,而后面的类指 class 类的实例。
Field 类的一个实例代表正在运行的一个类的具体的一个属性的所有信息,也就是
Field 类的一个实例就相当于正在运行的该类的一个属性;Method 类的一个实例代表正在
运行的一个类的具体的一个方法的所有信息,但这里并不包括构造函数,它有一个专门的
类来代表;Constructor 类由所有类的所有构造函数所抽象出来,Constructor 类的一个实
例就代表一个具体的构造函数,也正因此,通过
Constructor
类的实例可以得到一个类的
实例对象(相别于编译时的方法 new)。这里所说的类都是指运行时类,即可以在运行时
判断任意一个对象所属的类、构造任意一个类的对象、判断任意一个类所具有的成员变量
(一个类的成员是指该类中所有的属性和方法,而成员变量则指该类的属性;字段内容也
指属性值,字段即属性)和方法并可调用其方法(不能通过反射机制定义方法体)。
要 获 得 一 个 类 的 class 实 例 , 可 以 有 三 种 方 式 : 第 一 , 用 Class 类的 静 态 方 法
forName()来获得,在方法中要传一个字符串形式的参数,该参数是一个类的“全限定包名+
类名”,即类的完全限定名,调用该方法将导致所传得类被初始化;第二,用“ 对象
名.getClass()”来获得该对象所属类的 class 实例;第三,用“类名.class”也可以获得该类的
class 实例;此外,想要获得 java 里面基本数据类型以及关键字 void 的 Class 实例,只能用
第三种来获得,但是还有另一种专门给的方法,就是“ 类名.TYPE”来获得基本数据类型和
void 的 Class 实例( “类名.TYPE”获得的是其所对应的基本类型的 Class 实例,所以与“类
名.class”所获得的 Class 实例是一个实例对象,它们是相等的,当然这只是在 java8 大基本
数据类型和关键字 void 中有效);此外,如果一个类有子类,也可以先获得子类的 Class
实例,然后借助 Class 中的一个方法 getSuperClass()来获得其父类的 Clas 实例。
获 得 一 个 Constructor 类 的 实 例 , 即 获 得 运 行 时 类 的 构 造 函 数 ,
getConstructor(Class[])和 getConstructors()两个方法,前者方法反映此 Class 对象所指定的
类的指定公共构造方法,而且方法中还可以有参数,是一个参数的 Class 实例的数组(如
果没有参数,即调用默认的构造函数,由于调用这个方法必须传参数,那么就可以写成
getConstructor(new Class[]{}),即没有参数,数组是一个空数组);后者方法返回一个包
含某些 Constructor 对象的数组,包括此 Class 对象所表示的类的所有公共构造方法,如果
该类没有公共构造方法,或者该类是一个数组类,或者该类反映一个基本数据类型或
void,则返回一个长度为 0 的数组,返回值的类型是 Constructor<?>,也就是说类型会丢
失;另外,getDeclaredConstructor(Class[])和 getDeclaredConstructors()与上述的两个方法
规则基本一致,只不过这两个方法都是返回所有方法,或者应该是符合条件的所有方法,
而不像前两个方法只是返回公共的方法,这两个方法会返回公共的、受保护的、缺省的和
私有的所有构造方法,当然第一个方法还是返回符合条件的,或者说符合给定参数的一个
构造函数,只不过这个方法会遍历此 Class 类所反映的类的所有方法,而不像最初的那个
资源评论
- Z873115702011-11-11无有图形,只是文字,还是谢谢。感恩
aifuqiang0412
- 粉丝: 6
- 资源: 165
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功