目录
前言:
hello!今天和大家说一说反射,我个人觉得反射有点繁琐,要做的步骤有点多,但是目前对我们的要求是看的懂即可,不需要太过于深入。
一、反射:
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。
二、优缺点:
优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。
缺点:对性能有影响,这类操作总是慢于直接执行java代码。
三、使用反射:
获取Class类对象的三种方式:
1.类名.class属性 | 使用类的class属性来获取该类对应的Class对象 |
2.对象名.getClass()方法 | 调用对象的getClass()方法,返回该对象所属类对应的Class对象 |
3.Class.forName(全类名)方法 | 使用Class类中的静态方法forName(String className) |
Class类获取构造方法对象的方法:
Constructor<?>[] getConstructors() | 返回所有公共构造方法对象的数组 |
Constructor<?>[] getDeclaredConstructors() | 返回所有构造方法对象的数组 |
Constructor<T> getConstructor(Class<?>... parameterTypes) | 返回单个公共构造方法对象 |
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 返回单个构造方法对象 |
Constructor类用于创建对象的方法:
T newInstance(Object...initargs) | 根据指定的构造方法创建对象 |
Class类获取成员方法对象的方法:
Method[] getMethods() | 返回所有公共成员方法对象的数组,包括继承的 |
Method[] getDeclaredMethods() | 返回所有成员方法对象的数组,不包括继承的 |
Method getMethod(String name, Class<?>... parameterTypes) | 返回单个公共成员方法对象 |
Method getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回单个成员方法对象 |
Method类用于执行方法的方法:
Objectinvoke(Object obj,Object... args) | 调用obj对象的成员方法,参数是args,返回值是Object类型 |
Class类获取成员变量对象的方法:
Field[] getFields() | 返回所有公共成员变量对象的数组 |
Field[] getDeclaredFields() | 返回所有成员变量对象的数组 |
Field getField(String name) | 返回单个公共成员变量对象 |
Field getDeclaredField(String name) | 返回单个成员变量对象 |
Field类用于给成员变量赋值的方法:
voidset(Object obj,Object value) | 给obj对象的成员变量赋值为value |