JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类
的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方
法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为
java语言的反射机制。
1.反射相关类
Class:类
Field:成员变量
Method:表示方法
Constructor:构造器
2.使用反射类
a.获取到Class类
b.对类实例化
一、Class类
1.获取Class的三种方法
Class c1 = Person.class;
Class c2 = new Person().getClass();
Class c3 = Class.forName("cn.javatest.reflection.Person");
2.对类进行实例化
Class c=Class.forName("cn.javatest.reflection.Person");
Person p=(Person)c.newInstance();
String getName():获取类名称,包含包名;
String getSimpleName():获取类名称,不包含包名;
Class getSupperClass():获取父类的Class,例如:new Integer(100).getClass().getSupperClass()
返回的是Class<Number>!但new Object().getSupperClass()返回的是null,因为Object没有父类;
T newInstance():使用本类无参构造器来创建本类对象;
boolean isArray():是否为数组类型;
boolean isAnnotation():是否为注解类型;
boolean isAnnotationPresent(Class annotationClass):当前类是否被annotationClass注解了;
boolean isEnum():是否为枚举类型;
boolean isInterface():是否为接口类型;
boolean isPrimitive():是否为基本类型;
boolean isSynthetic():是否为引用类型;
二、Constructor类
1.获取Constructor对象
使用Class对象,获取Constructor类:
Constructor getConstructor(Class… parameterTypes):通过指定的参数类型获取公有构造器反射对象;
Constructor[] getConstructors():获取所有公有构造器对象;
Constructor getDeclaredConstructor(Class… parameterTypes):通过指定参数类型获
取构造器反射对象。可以是私有构造器对象;
Constructor[] getDeclaredConstructors():获取所有构造器对象。包含私有构造器;
2.Construcator类常用方法
String getName():获取构造器名;
Class getDeclaringClass():获取构造器所属的类型;
Class[] getParameterTypes():获取构造器的所有参数的类型;
Class[] getExceptionTypes():获取构造器上声明的所有异常类型;
T newInstance(Object… initargs):通过构造器反射对象调用构造器。
三、Field类
1.获取Field对象
使用Class对象,获取Field类:
Field getField(String name):通过名字获取公有成员变量的反射对象,
包含父类中声明的公有成员变量;
Field[] getFields():获取所有公有成员变量反射对象,包含父类中声明
的公有成员变量;
Field getDeclaredField(String name):通过名字获取本类中某个成员变量,
包含本类的private成员变量,但父类中声明的任何成员变量都不包含;
Field[] getDeclaredFields():获取本类中声明的所有成员变量,
包含private成员变量,但不包含父类中声明的任何成员变量;
2.Field类的常用方法
String getName():获取成员变量名;
Class getDeclaringClass():获取成员变量的类型;
Class getType():获取当前成员变量的类型;
Object get(Object obj):获取obj对象的成员变量的值;
void set(Object obj, Object value):设置obj对象的成员变量值为value;
四、Method类
1.获取Method
通过Class对象获取Method对象
Method getMethod(String name, Class… parameterTypes):通过方法名和方法参数类型
获取方法反射对象,包含父类中声明的公有方法,但不包含所有私有方法;
Method[] getMethods():获取所有公有方法,包含父类中的公有方法,但不包含任何私有方法;
Method getDeclaredMethod(String name, Class… parameterTypes):通过方法名和方法参数类
型获取本类中声明的方法的反射对象,包含本类中的私有方法,但不包含父类中的任何方法;
Method[] getDeclaredMethods():获取本类中所有方法,包含本类中的私有方法,但不包含父类中的任何方法。
2.Method常用方法
String getName():获取方法名;
Class getDeclaringClass():获取方法所属的类型;
Class[] getParameterTypes():获取方法的所有参数的类型;
Class[] getExceptionTypes():获取方法上声明的所有异常类型;
Class getReturnType():获取方法的返回值类型;
Object invode(Object obj, Object… args):通过方法反射对象调用方法,如果当前方法是实例方法,那么当前对象就是obj,如果当前方法是static方法,那么可以给obj传递null。args表示是方法的参数;
的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方
法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为
java语言的反射机制。
1.反射相关类
Class:类
Field:成员变量
Method:表示方法
Constructor:构造器
2.使用反射类
a.获取到Class类
b.对类实例化
一、Class类
1.获取Class的三种方法
Class c1 = Person.class;
Class c2 = new Person().getClass();
Class c3 = Class.forName("cn.javatest.reflection.Person");
2.对类进行实例化
Class c=Class.forName("cn.javatest.reflection.Person");
Person p=(Person)c.newInstance();
或者new
3.Class类的常用方法String getName():获取类名称,包含包名;
String getSimpleName():获取类名称,不包含包名;
Class getSupperClass():获取父类的Class,例如:new Integer(100).getClass().getSupperClass()
返回的是Class<Number>!但new Object().getSupperClass()返回的是null,因为Object没有父类;
T newInstance():使用本类无参构造器来创建本类对象;
boolean isArray():是否为数组类型;
boolean isAnnotation():是否为注解类型;
boolean isAnnotationPresent(Class annotationClass):当前类是否被annotationClass注解了;
boolean isEnum():是否为枚举类型;
boolean isInterface():是否为接口类型;
boolean isPrimitive():是否为基本类型;
boolean isSynthetic():是否为引用类型;
二、Constructor类
1.获取Constructor对象
使用Class对象,获取Constructor类:
Constructor getConstructor(Class… parameterTypes):通过指定的参数类型获取公有构造器反射对象;
Constructor[] getConstructors():获取所有公有构造器对象;
Constructor getDeclaredConstructor(Class… parameterTypes):通过指定参数类型获
取构造器反射对象。可以是私有构造器对象;
Constructor[] getDeclaredConstructors():获取所有构造器对象。包含私有构造器;
2.Construcator类常用方法
String getName():获取构造器名;
Class getDeclaringClass():获取构造器所属的类型;
Class[] getParameterTypes():获取构造器的所有参数的类型;
Class[] getExceptionTypes():获取构造器上声明的所有异常类型;
T newInstance(Object… initargs):通过构造器反射对象调用构造器。
三、Field类
1.获取Field对象
使用Class对象,获取Field类:
Field getField(String name):通过名字获取公有成员变量的反射对象,
包含父类中声明的公有成员变量;
Field[] getFields():获取所有公有成员变量反射对象,包含父类中声明
的公有成员变量;
Field getDeclaredField(String name):通过名字获取本类中某个成员变量,
包含本类的private成员变量,但父类中声明的任何成员变量都不包含;
Field[] getDeclaredFields():获取本类中声明的所有成员变量,
包含private成员变量,但不包含父类中声明的任何成员变量;
2.Field类的常用方法
String getName():获取成员变量名;
Class getDeclaringClass():获取成员变量的类型;
Class getType():获取当前成员变量的类型;
Object get(Object obj):获取obj对象的成员变量的值;
void set(Object obj, Object value):设置obj对象的成员变量值为value;
四、Method类
1.获取Method
通过Class对象获取Method对象
Method getMethod(String name, Class… parameterTypes):通过方法名和方法参数类型
获取方法反射对象,包含父类中声明的公有方法,但不包含所有私有方法;
Method[] getMethods():获取所有公有方法,包含父类中的公有方法,但不包含任何私有方法;
Method getDeclaredMethod(String name, Class… parameterTypes):通过方法名和方法参数类
型获取本类中声明的方法的反射对象,包含本类中的私有方法,但不包含父类中的任何方法;
Method[] getDeclaredMethods():获取本类中所有方法,包含本类中的私有方法,但不包含父类中的任何方法。
2.Method常用方法
String getName():获取方法名;
Class getDeclaringClass():获取方法所属的类型;
Class[] getParameterTypes():获取方法的所有参数的类型;
Class[] getExceptionTypes():获取方法上声明的所有异常类型;
Class getReturnType():获取方法的返回值类型;
Object invode(Object obj, Object… args):通过方法反射对象调用方法,如果当前方法是实例方法,那么当前对象就是obj,如果当前方法是static方法,那么可以给obj传递null。args表示是方法的参数;