反射
反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。
反射机制提供了哪些功能?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
- 在运行时判定任意一个对象所属的类
- 在运行时构造任意一个类的对象;
- 在运行时判定任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法;
- 生成动态代理;
Class.forName():传入类的全路径获取 通过对象实例instance.getClass()获取
class对象的获取
- getClass方法:Class< ? > class0 = person.getClass();
- forName()方法:class0 = Class.forName("传入类的全路径");
- 通过类的class属性: Person person = new Person(); class0 = Person.class;
class对象的摘要信息获取
-getName();//获取class名字 包含包名路径
-getPackage();//获取class的包信息
-getSimpleName();//获取class类名
-getModifiers();//获取class访问权限
class对象的属性、方法、构造函数获取
获取class对象的所有属性:getDeclaredFields();
获取class对象的public属性:getFields();
获取class指定属性:getDeclaredField("age");
获取class指定的public属性:getField("des");
获取class对象的所有声明方法:getDeclaredMethods();
获取class对象的所有方法包括父类的方法:getMethods();
获取class对象的父类:getSuperclass();
获取class对象的所有接口:getInterfaces();
获取class对象的所有声明构造函数:getDeclaredConstructors();
获取class对象public构造函数:getConstructors();
获取指定声明构造函数:getDeclaredConstructor(new Class[]{String.class});
获取指定声明的public构造函数:getConstructor(new Class[]{});
获取class对象的所有注解:getAnnotations();
获取class对象指定注解:getAnnotation(Deprecated.class);
获取class对象的直接超类的:Type getGenericSuperclass();
获取class对象的所有接口的type集合:getGenericInterfaces();
class对象动态生成
- newInstance();方法
- 对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成