关于java:JavaSE-反射

35次阅读

共计 996 个字符,预计需要花费 3 分钟才能阅读完成。

反射

作用: 在 运行状态 中, 获取任意一个类的构造, 从而创建对象, 获取指定办法或属性, 并执行办法.

这种在运行状态动静获取信息以及动静调用对象办法 (动静加载机制) 的性能被称为 java 的反射机制.

反封装


获取类构造 Class

Class c = 包名. 类名.class

或者

Class c = 对象.getClass()

或者

Class.forName("包名 + 类名")

对于形式 3, 如果无奈找到给定的全限定名对应的类, 则会抛出 ClassNotFoundException 异样.

获取构造方法 Constructor

通过获取的 Class 对象, 调用办法

getConstructor(参数列表)

或者

getDeclaredConstructor(参数列表)

从而或者指定参数列表的构造方法.

或者通过 getConstructors()getDeclaredConstructors()获取所有构造方法

其中 getDeclaredConstructor 只能获取私有权限的构造方法, 而 getDeclaredConstructors 能够获取所有权限的构造方法.

获取构造方法之后, 即可通过 newInstance(参数列表) 办法创建对象. 对于非公有权限的构造方法, 须要通过 setAccessible(true) 设置疏忽拜访查看.

获取成员办法 Method

在获取类构造 /Class 对象之后, 能够通过

getMethod(办法名, 参数列表)
或者
getMethods()

getDeclaredMethod(办法名, 参数列表)
或者
getDeclaredMethods()

获取该类下的指定成员办法或者所用成员办法.

而后通过办法 invoke(对象, 参数列表) 执行该办法

同样, 对于非公有权限的办法须要通过 setAccessible(true) 设置疏忽拜访查看.

获取成员属性 Field

获取成员属性的形式与获取成员办法的过程根本相似

须要通过办法

getField(属性名)
或者
getFields()

getDeclaredField(属性名)
或者
getDeclaredField()

获取指定名称的属性或者所有属性, 而后调用其 get/set 办法

同时通过 setAccessible(true) 设置疏忽拜访查看.

获取注解

获取类构造, 办法, 属性之后, 能够通过

getAnnotations(注解类型.class)

获取其上的注解的对象, 而后调用对应的注解内的办法, 获取注解外部的值.


正文完
 0