java反射复习(1)

反射是什么东西??

我们利用反射库来编写一些特殊的程序,这种程序具有分析类的能力,这种特殊性就叫做可反射。

反射的机制十分强大,我们可以用这种机制实现动态操纵java代码

先简要看一下反射的用处

  • 在运行时分析类的能力。
  • 在运行时检查对象,例如,编写一个适用于所有类的toString方法。
  • 实现泛型数组操作代码。(也许就是数组的每个元素都可以都可以操纵一部分java代码??)
  • 利用Method 对象,这个对象很像C++中的函数指针

机制

要了解反射的机制,就必须知道Class类,这个类是用来干嘛的呢?(实现反射??哈哈无限循环了)当然,是有底层的机制被Class类封装再来实现反射机制。这个底层的机制就是:Java运行时系统始终为所有对象维护一个运行时类型标识。这是一种信息,关于各个类的所有对象的特殊信息。这个信息会跟踪每个对象所属的类。虚拟机利用运行时类型信息选择要执行的正确方法。

那么我们如何访问这些信息呢?就是使用Class类。

“Class对象实际上描述的是一个类型。这可能是类,也可能不是类。例如,int 不是类,但int.class确实是一个Class类型的对象。”我们是否可以理解为:类型有两种——基本类型和各种类,然后Class描述实例对应的类型。

使用反射

通过实例或者字符串得到匹配类的Class实例

使用getClass()方法返回一个包含当前实例(e)所属类运行时的信息对应的Class类的实例(cl)

当然,Class也是Object类的子类,也有getName()方法(不在包返回类名,在包里就加上一个包名)等等。建议使用的时候多记记。

使用字符串记录类名再用静态方法forName获得类名对应的对象

这里要用完整的类名才可以,要注意如果不是一个接口名或者类名,那么就该抛出异常了,我们应该处理好这个异常。

使用T.class得到一个匹配的类对象

虚拟机为每个类型管理一个唯一一个的Class对象。也就是说:每个对象调用getClass()方法后,得到的Class对象,和T.class得到的对象是同一个。因此我们可以使用

if(e.getClass() == Employee.class)

来测试未知对象e的匹配的Class对象是不是Employee类对应的Class对象,这个比instanceof严格一些。

通过Class实例构建对象

如果有一个Class 类型的对象,可以用它构造类的实例。调用gESnsEcto「方法将得到 一个Constructor 类型的对象,然后使用newlnstance方法来构造一个实例。

如果这个类没有无参构造,那就该处异常了

到目前为止,我们只能用反射来的出一个Class对象,以及用Class对象构造一个对应类的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值