【Java基础】java反射使用

15 篇文章 0 订阅
6 篇文章 0 订阅

定义

java反射是指在程序运行过程中,对于任意一个类,能够获取其所有的属性和方法;对于一个对象,可以调用其所有的方法,修改其所有的属性。该种能够动态获取信息或调用对象方法的功能称为反射。

优点

增加程序灵活性,运行时根据需要动态加载类。

缺点

  • 性能较差。
  • 破坏封装性。
  • 暴露内部细节。

常用方法

获取Class对象的三种方式

方法注意
对象.getClass()方法需要在已构建实例的情况使用
类名.class不会调用任何代码
Class.forName(“类名全称”)会执行类的静态代码块

类相关常用方法

方法用途注意
newInstance()创建类的实例调用类的无参构造方法
getClassLoader()获得类加载器
getInterfaces()获得类实现的类或者接口

获得类中属性(Field)

方法用途注意
getFields()获得所有公有的属性
getField(“FieldName”)获得公有的特定的某个属性尝试获取私有属性会报异常
getDeclaredFields()获得类所有的属性
getDeclaredField(“FieldName”)获得特定的某个属性可以是私有属性

获得类中方法(Method)

classObject.getMethod()与获得属性的方法类似。获得类加载器、注解的方式不再赘述。
需注意的是getMethod()会获取父类的和实现的接口的方法。

Field类方法

方法用途
equals(Object obj)属性与obj相等则返回true
get(Object obj)获得obj中对应的属性值
set(Object obj, Object value)设置obj中对应属性值

Method类方法

方法用途
invoke(Object obj, Object… args)属性与obj相等则返回true

其他重要方法

私有属性(方法).setAccessible(true) 允许调用私有方法,获取/修改私有属性。该方法并非把权限修改为public,而是取消了权限校验。

总结

反射给予程序员更高的权限,以“上帝视角”来操纵全局,原本不能获取的私有方法和属性都能调用和修改了。这带来了很大的灵活性,但是同时也造成一定的风险,需要慎用反射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值