反射:所有的框架的基础
Class类是反射的基础
Java提供了一套机制来动态获取类的信息以及动态调用对象的方法的功能,这套机制就叫——反射
反射的API:
Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Modifier类:代表修饰符。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
-------------------------------------------------------------------------------------
Class类常用方法:
Object newInstance():创建此 Class 对象所表示的类的一个新实例 调用无参的构造方法
Constructor<T> getConstructor(Class<?>... parameterTypes) 得到指定参数列表类型的构造方法 ...代表可变参数 可以给参数或不给 也可以给数组
Field[] getFields():获得所有公有属性 包括父类的
Field[] getDeclaredFields(): 获取所有属性 包括私有的 不包括父类
Field getDeclaredField(String name):根据属性名获取一个属性包括私有 不包括父类的属性
Field getField(String name):根据属性名获取一个公有属性 包括父类
Method[] getMethods(); 获取所有公有方法 包括父类的方法
Method[] getDeclaredMethods(); 获取所有方法 不包括父类方法 不包括构造方法
Method getMethod(String name, Class<?>... parameterTypes) 根据方法名和参数类型的class对象 获取一个公有方法 包括父类
Method getDeclaredMethod(String name, Class<?>... parameterTypes) 根据方法名和参数的类型的class对象 获取类的所有方法 不包括父类方法
---------------------------------------------------------------------------------------------------
Field类常用方法:
Modifier getModifiers():获得属性的修饰符
Class getType() : 获得属性的类型 返回一个class对象
void set(object obj,object value):给指定对象的当前field属性赋值
object get(object) :获取指定对象的当前field属性的值
void setAccessible(true); 如果需要强制访问类的私有成员 设置为true 安全考虑一般不建议
----------------------------------------------------------------------------------------------------
Method类常用方法:
Object invoke(Object obj, Object... args) 调用指定对象的指定方法 ...代表可变参数 可以给参数或不给 也可以给数组
Class[] getParameterTypes() :获得方法的所有参数类型
object getReturnType():获得方法的返回值类型
--------------------------------------------------
Array 类提供了动态创建和访问 Java 数组的方法。
static Object newInstance(Class<?> componentType,int... dimensions):创建一个多维动态数组 第一个参数指定元素类型,第二个指定每个维度的长度
static Object newInstance(Class<?> componentType, int length) :创建一个一维度数组 第一个参数指定元素类型,第二个指定数组长度
static void set(Object array, int index, Object value):设置指定数组 指定索引的元素为指定值
static Object get(Object array, int index):获取数组指定索引的元素
static int getLength(Object array):获取数组长度