Reflection反射

什么是反射?

反射是Java语言的一种机制,它允许程序在运行时动态地获取类的信息并操作对象,包括访问和修改类的属性、调用类的方法以及创建对象实例等。通过反射,我们可以在编译时无法确定的情况下,操作和调用类的成员。

主要用途:

  1. 动态加载类:通过反射可以在运行时动态加载类,根据类名获取Class对象,然后使用Class对象创建对象实例。
  2. 获取类的信息:通过反射可以获取类的属性、方法、构造方法等信息。可以获取类的修饰符、父类、实现的接口等。
  3. 调用类的方法:通过反射可以动态地调用类的方法。可以通过Method对象来调用对应方法,并传递相应的参数。
  4. 修改类的属性:通过反射可以获取和修改类的属性。可以通过Field对象来获取和修改对应属性的值。
  5. 动态代理:反射和动态代理密切相关。通过反射,可以在运行时动态地生成代理对象,并在代理对象中增加额外的逻辑。
  6. 框架开发:许多框架都使用了反射机制,通过读取配置文件或注解来动态地加载和操作类,实现灵活的功能扩展。 

反射的常用类:

  1. Class类:代表一个类或接口,在反射中经常用到。
  2. Field类:代表类的字段,可以用来访问和修改字段的值。
  3. Method类:代表类的方法,可以用来调用方法。
  4. Constructor类:代表类的构造方法,可以用来创建对象实例。

反射的常用方法:

1⃣️获取Class对象:

  • Class.forName(String className): 根据类的完全限定名获取对应的Class对象。
  • object.getClass(): 获取对象的Class对象。
  • 类名.class : 通过类名访问class 

2⃣️获取类的属性:

  • getField(String name): 获取指定名称的公共字段。
  • getDeclaredField(String name): 获取指定名称的字段,包括私有字段。
  • getFields(): 获取所有公共字段。
  • getDeclaredFields(): 获取所有字段,包括私有字段。

3⃣️获取类的方法:

  • getMethod(String name, Class<?>... parameterTypes): 获取指定名称和参数类型的公共方法。
  • getDeclaredMethod(String name, Class<?>... parameterTypes): 获取指定名称和参数类型的方法,包括私有方法。
  • getMethods(): 获取所有公共方法。
  • getDeclaredMethods(): 获取所有方法,包括私有方法。

4⃣️获取类的构造方法:

  • getConstructor(Class<?>... parameterTypes): 获取指定参数类型的公共构造方法。
  • getDeclaredConstructor(Class<?>... parameterTypes): 获取指定参数类型的构造方法,包括私有构造方法。
  • getConstructors(): 获取所有公共构造方法。
  • getDeclaredConstructors(): 获取所有构造方法,包括私有构造方法。

5⃣️创建对象实例:

  • newInstance(): 创建该Class对象表示的类的实例。

6⃣️调用方法:

  • invoke(Object obj, Object... args): 调用指定对象上的该方法,并传递相应的参数。

7⃣️修改字段的值:

  • set(Object obj, Object value): 将指定对象上该字段的值设置为指定的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcannal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值