java的反射

什么是反射机制?

Java 动态执行机制,可以动态执行功能

  1. 反射是java的一个高级API,其提供了在运行时判断任意一个对象所属的类型,并可以检查解析的内部结构
  2. 反射可以动态加载类型,并能够创建对象
  3. 反射可以动态访问对象的属性
  4. 反射可以动态执行对象的方法
  5. 利用反射的API还可以动态的访问不可见的属性和方法

反射的优缺点

优点:

可以动态执行!在运行期间根据业务功能动态执行方法,访问属性,最大发挥了java的灵活度

缺点:

对性能有影响,反射的运行慢于直接执行java代码

获取一个类的类对象有以下方式:

1:类名.class
例如:
Class cls = String.class;
Class cls = int.class;
注:基本类型只有这种获取类对象的方式

2:Class.forName(String className)
例如:
Class cls = Class.forName(“java.lang.String”);
注意:参数是类的完全限定名,即:包名.类名

3:使用类加载器ClassLoader

Java 反射API位于java.lang.reflect包中,主要包括以下几类:
—Constructor类:用来描述一个类的构造方法。
—Field类:用来描述一个类的方法
—Method:类用来描述类内各元素的修饰符
—Array:用来对数组进行操作

Class cls = Class.forName(类名)
1.类名是运行期间动态输入的类名,可以任何类名
2.返回值是一个引用,利用这个引用指向的对象可以访问方法区中的类信息。
3.如果类名是错误的将出现“类没有找到”的异常

如果利用反射API调用了没有可访问权限时候会抛出异常
IllegalAccessException ,表示没有访问权限。
但是在Method方法上提供了解除访问限制的方法:
setAccessible(boolean flag):此方法可以调用其他类私有的方法
在invoke之前使用这个方法可以解除访问限制,实现访问没有权限的方法。

注意:这个功能破坏了面向对象原有的封装行,因此在使用时谨慎使用,灵活运用

哪里用到了反射?

  1. JDBC中利用反射动态加载了数据库驱动程序
  2. Web服务器中利用反射调用了Sevlet的服务方法
  3. Eclispe等开发工具中利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法
  4. 很多框架都用到了反射机制,注入属性,调用方法,如:Hibernate,Struts2,Spring
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值