反射

77 阅读2分钟

反射

反射(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对象动态生成

  1. newInstance();方法
  2. 对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成