你真的了解反射吗?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/meetbetterhc/article/details/99756057

第一次接触反射,可能不好理解,但还是得先说一些抽象的概念。

反射是在类运行的时候动态的获取类或对象的信息

提一嘴RTTI,做个对比,可能有助于理解反射

  • RTTI是在编译时打开和检查.class文件
  • 反射是在运行时打开和检查.class文件

Class类与java.lang.reflect类库一起对反射进行了支持

再来,明确一些相关概念。

  • 类对象:记录类的信息的对象,Class类的对象(每加载一个类就会产生一个类对象)
  • 类的对象:一个类的某一个具体实例

Class类模板

获取类对象的三种方式:

  • 类名.class()
  • 对象名.getClass()
  • Class.forName("fullPath"):通过类名获取类对象

方法 

  •  getName():获取类的全路径
  •  getSimpleName():获取类名
  •  getPackage().getName():获取包名
  •  getSuperclass().getName():获取此类的父类的全名
  •  getInterfaces():获取此类直接实现的接口,返回Class集合

java.lang.reflect

1)属性对象  Field

Field[]  getFields():获得本类及父类所有公开属性

Field[]  getDeclaredFields():获得本类的所有属性

Field  getField(String name):通过属性名获得本类或父类的此公开属性,返回此属性全路径

Field  getDeclaredField(String name):通过属性名获得本类的此属性,返回此属性全路径

2)  方法对象  Method

Method[]  getMethods():获得本类及父类所有公开方法

Method[]  getDeclaredMethods():获得本类的所有方法

Method  getMethod(String name):通过方法名获得本类或父类此公开属性,返回此方法全路径

Method  getDeclaredMethod(String name):通过方法名获得本类的此属性,返回此方法全路径

3)  构造方法对象  Constructor

Constructor[]  getConstructors():获得本类及父类的公开构造方法

Constructor[]  getDeclaredConstructors():获得本类的所有构造方法

Constructor  getDeclaredConstructor(参数类型顺序):获得对应参数的构造方法

Constructor  getDeclaredConstructor():获得无参的构造方法

其他实用方法

类对象.newInstance():通过类对象创建类的对象

Method类型的方法.invoke(对象,调用此方法要传的参数):返回值为Object

属性.set(对象,值)

setAccessible(true):设置为可访问,访问私有属性和方法

猜你喜欢

转载自blog.csdn.net/meetbetterhc/article/details/99756057