反射就是把Java类中的各种成分映射成相应的Java类!
“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。
Java不是动态语言,却有着一个非常突出的动态相关机制:Reflection。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java.lang包下
Class<T>:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源
java.lang.reflect包下
Field 类:代表类的成员变量(也称类的属性)
Method类:代表类的方法
Constructor 类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组的元素的静态方法
类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象
Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始
平常情况我们通过new Object来生成一个类的实例,但有时候我们没法直接new,只能通过反射动态生成。
实例化无参构造函数的对象,两种方式:
①Class. newInstance();
②Class. getConstructor (new Class[]{}).newInstance(new Object[]{})
实例化带参构造函数的对象:
clazz. getConstructor(Class<?>... parameterTypes) . newInstance(Object... initargs)
获得当前类以及父类的public Method:
Method[] arrMethods = classType. getMethods();
获得当前类声明的所有Method:
Method[] arrMethods = classType. getDeclaredMethods();
获得当前类以及父类指定的public Method:
Method method = classType. getMethod(String name, Class<?>... parameterTypes);
获得当前类声明的指定的Method:
Method method = classType. getDeclaredMethod(String name, Class<?>... parameterTypes)
通过反射动态运行指定Method:
Object obj = method. invoke(Object obj, Object... args)
只要用到反射,先获得Class Object。
------- android培训、 java培训、期待与您交流! ----------