反射机制

在运行状态中 对于任意一个类都能够知道这个类的所有属性和方法,对于任意一个对象都能够调整它的任意一个方法和属性这种动态获取信息以及动态调用对象的方法和功能称为java语言反射机制通俗的理解:在运行期间可以对类的内容进行操作。

反射原理

1.编写的文件源文件.java保存在本地磁盘
2.编译生成字节码文件.class
3.通过jvm将字节码加载到内存当中
4.将字节码加载到内存当中 把整个字节码文件看成一个对象,对象类型为Class类型
5.获得对象,就可以获得字节码文件当中所有内容(构造器 方法 属性)

反射中的4大核心类

Class类

  • 类的实例化对象.getClass()

    任何类的实例化对象通过调用Object类的getClass()方法都可以取得其Class类对象

  • 类.class

    直接根据具体类名称.class取得对应类的Class类对象

  • Class.forName(String className)

forName()方法是Class类的类方法,传入的参数为具体的类的全名

Constructor类

  • getConstructor(参数类型.class)

    只能取得指定参数类型的public权限的构造方法

  • getConstructors()

    只能取得public权限的构造方法

  • getDeclaredConstructor(参数类型.class)

    取得具体类的指定参数类型的任意权限的构造方法

  • getDeclaredConstructors()

    取得具体类的所有构造方法

  • newInstance("")

    等价于有参构造

Method类

  • getMethod('方法名',参数类型.class)

根据方法名以及参数取得指定的权限为public的普通方法

  • getMethods()

    取得本类以及父类中所有权限为public的普通方法

  • getDeclaredMethod('方法名',参数类型.class)

    根据方法名以及参数在本类中取得任意权限的普通方法

  • getDeclaredMethods()

    取得在本类中所有的任意权限的普通方法

  • invoke(对象名,设置方法参数)

    返回Object类对象,第一个参数为Object,第二个接收需要调用的方法的参数

Field类

  • getField(String name)

    只能取得权限为public的指定属性

  • getFields()

    在本类以及父类中查找权限为public的所有属性

  • getDeclaredField(String name)

在本类中取得任意权限的指定属性

  • getDeclaredFields()

    只在本类中查找任意权限的所有属性

  • set(调用对象,“设置属性参数”)

    通过反射设置属性值

  • get(调用对象)

    通过反射取得属性值

参考文章链接

java之反射4大核心类
java4大核心类及其常用操作

Last modification:April 20th, 2020 at 10:12 am