在编译时不能确定哪个类被加载,而在程序运行时才加载、使用。
反射是指能够在运行时,观察并修改自己运行时的行为特性。java反射机制提供了以下的一些功能:
- 在运行时判断任意一个对象的所属类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所属的属性和方法
- 在运行时调用任意一个对象的方法
反射常用的java类型有:
- java.lang.Class<T>类可以获取类和类的成员信息
- java.lang.reflect.Constructor<T>类可以调用类的构造方法
- java.lang.reflect.Feild类可以访问类的属性
- java.lang.reflect.Method类可以调用类的方法
使用反射的基本步骤:
- 导入java.lang.reflect.*是java基础包
- 获取需要操作的java.lang.Class类对象
- 调用类的方法、获取Field、Method等等
- 使用反射API操作实例成员
获取类实例的三个方法:
- 方法一:对象.getClass();
- 方法二:类.class;
- 方法三:Class.forName();
获取类型的基本信息:
String getName() 以字符串形式返回该类型的名称;String getSimpleName()以字符串形式返回该类型的简称 ; Package getPackage() 获取该类型所在的包 ;Class getSuperclass() 返回该类型的超类的class实例; Class[] getInterfaces() 返回该类型所实现的全部接口的Class实例; int getModifiers() 返回该类型的所有修饰符,由public、protected,private,final,static,abstract等对应的int常量组成,返回的整数应使用Modifier工具类来解码,才可以判断修饰符的构成 ;Class[] getDeclaredClasses() 返回该类型中包含的全部内部类的Class实例 ;Class getDeclaringClass()反馈该类型所在的外部类的Class实例。
获取构造方法的信息:
Constructor getConstructor(Class... params)返回该类型指定参数列表的public构造方法,构造方法的参数列表与params所指定的类型列表所匹配 ; Constructor[] getConstructors() 返回该类型的所有public 构造方法 ; Constructor getDeclaredConstructor(Class ... params) 返回该类型的指定参数列表的构造方法,访问级别不限 ; Constructor [] getDeclaredConstructors() 返回该类型的所有构造方法,访问级别不限。
获取属性信息:
Field getField(String name) 返回该类型中所指定名称的public属性,name参数用户指定属性名称 ; Field[] getFields() 返回该类型中所有的public属性 ; Field getDeclaredField(String name) 返回该类型中指定名称的属性,与属性访问级别无关; Field[] getDeclaredFields() 返回该类型中所有的属性,与属性的访问级别无关。
获取方法信息:
Method getMethod(String name ,Class... params) 返回该实例中指定的public方法,name参数用于指定方法名称,params参数指定参数列表; Method[] getMethods() 返回该实例中所有的public方法; Method getDeclaredMethod(String name,Class... params) 返回该实例中指定的方法,与方法的访问级别无关 ; Method[] getDeclaredMethods() 返回该实例中的全部方法,与方法的访问级别无关。