欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

反射api

程序员文章站 2022-05-31 10:07:14
...

反射机制允许程序在运行时进行自我检查,对其内部成员进行操作

实现在运行时对类进行装载,增加对程序的灵活性

 

功能:

       得到一个对象的所属类;获取类的所有变量和方法;运行时创建对象、调用对象方法

 

获取Class对象的三种方式:

1、Class.forName("类的完全限定名");

2、类名.class;

3、对象.getClass();

 

String getName();Class类所表示的实体(类,接口,数组类,基本类型或void)完整名称

 

String getCanonicalName();与getName()方法一样

 

String getSimpleName();Class类所表示的实体(类,接口,数组类,基本类型或void)类名称

 

Class getSuperclass(); 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的父类的 Class。

 

Object newInstance();为类创建一个实例,前提这个类必须得有无参构造方法

 

ClassLoader getClassLoader();返回这个类的类加载器

 

Class getComponentType(); 返回表示数组组件类型的 Class。

 

boolean isArray(); 判定此 Class 对象是否表示一个数组类

 

boolean isInterface(); 判定此 Class 对象是否表示一个接口

 

构造方法

Constructor getConstructor();获得类的无参构造方法再通过Constructor的newInstance()创建实例

 

Constructor getConstructor(Class<?>... parameterTypes);该方法参数与构造器的参数类型的Class对象对应

获得类的有参构造方法再通过Constructor的newInstance(Object ... initargs)创建实例

 

属性

Field getField(String name);通过属性名获取类的public修饰的属性

通过Field的set(Object obj, Object value)给该属性赋值obj该属性所在类的对象,value设值

Field的get(Object obj)获取该属性值obj该属性所在类的对象

 

Field[] getFields();获取类的所有public修饰的属性

 

Field getDeclaredField(String name);通过属性名获取类的任意域的属性

获取私有的属性必须使用Field的setAccessible(boolean flag)方法给予访问的权限

 

Field[] getDeclaredFields();获取类中所有的属性,同样私有的属性需要给予权限

 

方法

Method getMethod(String name, Class<?>... parameterTypes);

第一个参数通过方法名获取类中public修饰的方法,第二个参数与该方法参数类型的Class对象对应,若是无参直接给null;

通过Method的invoke(Object obj, Object... args)方法调用该方法,obj该方法所在类的对象,args方法参数

 

Method[] getMethods();获取类中所有public修饰的方法

 

Method getDeclaredMethod(String name, Class<?>... parameterTypes)

与getMethod()方法作用一样,但可以获取任意修饰符修饰的方法 

private方法仍需要通过setAccessible(boolean flag)给予权限

 

Method[] getDeclaredMethods();获取类中任意修饰符修饰的方法同样私有的方法需要给予权限

 

通过Method的getReturnType()方法获取方法返回值类型、getParmenterTypes()方法获取方法的参数列表