Class类的类表示正在运行的Java应用程序中的类和接口。 枚举是一种类,一个注释是一种界面。 每个数组也属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组共享。
先创建一个需要操作的目标类
首先我们要Class来获取对应类的字节码文件来使用Class clz = User.class;
使用Constructor<?>[] getConstructors() 方法来返回类中所有公有的构造器;
使用Constructor<?>[] getDeclaredConstructors() 来获取目标类中所有的构造器共有,私有
获取某一个构造器:Constructor getConstructor(类<?>… parameterTypes)
parameterTypes:参数数组,也就是根据构造器的参数来确定一个构造器
注意:如果构造器的权限是private需要使用Constructor getDeclaredConstructor(类<?>… parameterTypes);
使用构造器创建对象:T newInstance() 方法类创建对象
因为私有构造器只能在本类中使用,所以要先通过void setAccessible(boolean flag) 私有的构造器原本是flase会强制经行执行java语句检测,所以要先进行改变成true改为在使用时抑制Java语言访问检查;
获取目标类中的方法
方法 getMethod(String name, 类<?>… parameterTypes)
返回一个 方法对象,它反映此表示的类或接口的指定公共成员方法 类对象。
方法[] getMethods()
返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和超接口继承的声明。
方法 getDeclaredMethod(String name, 类<?>… parameterTypes)
返回一个 方法对象,它反映此表示的类或接口的指定声明的方法 类对象。
方法[] getDeclaredMethods()
返回包含一个数组 方法对象反射的类或接口的所有声明的方法,通过此表示 类对象,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
Object invoke(Object obj, Object… args)
在具有指定参数的 方法对象上调用此 方法对象表示的底层方法。
参数不定的方法的调用
基本类型可以使用
invoke(obj,new in[]{1,2,3});
像String类型的引用类型必须使用
invoke(obj,new Object[]{new int[]{}});