反射的概念
在java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象
方法的功能称为Java语言的反射机制
运行时生成对象实例
运行期间调用方法
运行时更改属性
可以实现的功能
a.在运行时判断任意一个对象所属的类
b.在运行时构造任意一个类的对象
c.在运行时判断任意一个类所具有的方法和属性
d.在运行时调用任意一个对象的方法
e.生成动态代理
Java反射应用场合
java程序中许多对象在运行时都会出现两种类型:编译时类型和运行时类型
编译时类型由声明该对象时使用的类型决定,运行时的类型由实际赋给该对象的类型决定
Person p = new Student();
Class 类 反射的核心类获取类的属性 方法等内容信息
Field类 表示类的属性,可以获取和设置类中属性的值
Method类 表示类的方法,它可以用来获取类中方法的信息,或者执行方法。
Constructor类 表示类的构造方法
java程序中获得Class对象通常有如下三种方式:
调用某个对象的getClass()方法
Person p = new Person();
Class cla = p.getClass();
调用某个类的class属性来获取该类对应的class对象
Class cla = Person.class;
使用Class类的forName()静态方法
Class cla = Class.forName("com.pb.test");
Constructor getConstructor(Class[] params)
返回此Class对象所表示的类的指定的public构造方法,params参数是按声明顺序标识该方法参数类型
的Class对象的一个数组。构造方法的参数类型与params所指定的参数类型所匹配
Constructor[] getConstructors() 返回此Class对象所表示的类的所有的public构造方法
Constructor getDeclaredConstructor(Class[] params) 返回此Class对象所表示的类的指定构造方法,
与构造方法的访问级别无关
Constructor getDeclaredConstructors() 返回此Class对象所表示的类的全部方法,与方法的
访问级别无关
Method getMethod(String name,Class[] params);
返回此Class对象所表示的类的指定的public方法,name参数用于指定方法名称,params参数是
按声明顺序标识该方法参数类型的Class对象的一个数组 c.getMethod("info",String.class);
Method[] getMethods();
返回此Class对象所表示的类的所有的public方法
Method getDeclaredMethod(String name,Class[] params);
返回此Class对象所表示的类的指定的方法,与方法的访问级别无关
Method[] getDeclaredMethods();
返回此Class对象所表示的类的全部方法,与方法的访问级别无关
Field getField(String name);
返回此Class对象所表示的类的指定的public属性,name参数用于指定属性名称
Field[] getFields();
返回此Class对象所表示的类的所有public属性
Field getDeclaredField(String name)
返回此Class对象所表示的类的指定属性,与属性的访问级别无关
Field[] getDeclaredFields()
返回此Class对象所表示的类的全部属性,与属性的访问级别无关
访问Class对应的类所包含的注释
<A extends Annotation>A getAnnotation(Class<A> annotationClass)
试图获取该Class对象所表示类上指定类型的注释;如果该类型的注释不存在则返回null.其中
annotationClass参数对应于注释类型的Class对象
Annotation[] getAnnotations();返回此元素上存在的所有注释
Annotation[] getDeclaredAnnotations();返回直接存在于此元素上的所有注释
访问Class对应的类所包含的内部类
Class[] getDeclaredClasses();
返回该Class对象所对应类里包含的全部内部类
访问Class对应的类所在的外部类
Class getDeclaringClass();
返回该Class对象所在的外部类
int getModifiers(); 返回此类或接口的所有修饰符
Class[] getInterfaces(); 返回该Class对象对应类所实现的全部接口
package getPackage(); 获取此类的包
String getName(); 以字符串形式返回此Class对象所表示的类的名称
String getSimpleName();以字符串形式返回此Class对象所表示的类的简称
Class.getSuperclass();返回该Class所表示的类的超类对应的Class对象