反射的笔记

一.概念

运行过程中,对任意一个类都能获取类中的属性和方法,对任意一个对象都能调用对象中的属性和方法,动态获取信息及调用对象的方法,实现功能的反射机制

作用:动态获取类的信息

相关类主要包括:Class 类型; Constructor 构造方法; Method 方法; Field 属性,Class外的其他三个都在java.lang.reflect包中

1.Class类

一旦class文件被加载到内存,就会创建一个Class对象,Class类是反射机制的基础,通过Class类可以得到类的基础信息.

获取的三种方法:

1.Object中的getClass方法:适用于知道对象获取

2.类名.class方法:适用于通过类名获得

3.通过Class.forName("类的地址")获取Class对象

2.Constructor类

Constructor<泛型数据> constructor ="Class对象".getConstructor("参数类型.class,没有可以不写");

可以通过getxxx方法获得构造方法的基本信息,例如:getName(返回构造方法的名字),getId(返回构造方法中的id)等

还可以通过newInstance创建实例

constructor.newInstance(参数数据);

3.Feild类

public Field getField(String name)通过指定Field名字,返回 Field实例

获得类中属性

getField("name")获得指定名称的公共权限的属性名

getDeclaredField("name")获得指定名称的所有私有权限的属性名

getFields获得公共权限的属性名

getDeclaredFields获得所有私有权限的的属性名

4.Method类

Method getMethod(String name, Class... parameterTypes) : 通过指定方法名,参数类型,返回一个Method实例

获得类中的方法

x.getMethods()获得类中所有的公共的成员方法

x.getMethod("getId",type) 获得公共的指定名称参数的成员方法

x.getDeclaredMethods();得类中所有的成员方法(包含私有的)

x.getDeclaredMethod("name",type)得公共的指定名称参数的类中所有的成员方法

invoke

x.invoke(y)实现在y里的x方法

优点:

● 1.增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作

● 2.提高代码的复用率,比如动态代理

● 3.可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态 调用

缺点:

● 1.反射会涉及到动态类型的解析,导致性能要比非反射调用更低

● 2.使用反射技术通常要在一个没有安全限制的程序运行.

● 3.反射可以绕过一些限制访问的属性或者方法,可能会导致破坏代码本身的抽象 性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值