java.lang.reflect包下的类,包括Constructor(构造方法类),Field(成员变量类),Method(方法类),Modifier(访问权限类)
1. 构造方法类 Constructor
//Constructor
//返回所有具有public访问权限的构造函数的Constructor对象数组
// Constructor[] cs = userclazz.getConstructors();
// for (Constructor constructor : cs) {
// System.out.println(constructor.getName());
// }
//返回所有声明的(包括private)构造函数对象
// Constructor<?>[] cdeclar = userclazz.getDeclaredConstructors();
// for (Constructor<?> constructor : cdeclar) {
// System.out.println(constructor.getName());
// }
//创建新实例
// userclazz.newInstance();
// try {
// Constructor<?> cs = userclazz.getDeclaredConstructor(String.class,int.class);
// cs.setAccessible(true);//设置可访问私有方法
// //返回 Class 对象,该对象表示声明由此 Constructor 对象表示的构造方法的类,其实就是返回真实类型(不包含参数)
// Class<?> cl1 = cs.getDeclaringClass();
// System.out.println(cl1.getName());
// //按照声明顺序返回一组 Type 对象,返回的就是 Constructor对象构造函数的形参类型。
// Type[] ty = cs.getGenericParameterTypes();
// //按照声明顺序返回一组 Class 对象,即返回Constructor 对象所表示构造方法的形参类型
// Class<?>[] ct = cs.getParameterTypes();
User u01 = (User) cs.newInstance("j",12);
//
// } catch (Exception e) {
// e.printStackTrace();
// }
2. 成员变量类 Field
//Field
// //获取指定name名称的(包含private修饰的)字段,不包括继承的字段
// Field f1 = userclazz.getDeclaredField("age");
// //获取Class对象所表示的类或接口的所有(包含private修饰的)字段,不包括继承的字段
// Field[] farr = userclazz.getDeclaredFields();
// //获取指定name名称、具有public修饰的字段,包含继承字段
// Field f2 = userclazz.getField("name");
// //获取修饰符为public的字段,包含继承字段
// Field[] farr2 = userclazz.getFields();
// void set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
// Object get(Object obj) 返回指定对象上此 Field 表示的字段的值
// Class<?> getType() 返回一个 Class 对象,它标识了此Field 对象所表示字段的声明类型。
// boolean isEnumConstant() 如果此字段表示枚举类型的元素则返回 true;否则返回 false
// String toGenericString() 返回一个描述此 Field(包括其一般类型)的字符串
// String getName() 返回此 Field 对象表示的字段的名称
// Class<?> getDeclaringClass() 返回表示类或接口的 Class 对象,该类或接口声明由此 Field 对象表示的字段
// void setAccessible(boolean flag) 将此对象的 accessible 标志设置为指示的布尔值,即设置其可访问性
3. 方法类 Method
//Method
// Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回一个指定参数的Method对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
// Method[] getDeclaredMethod() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
// Method getMethod(String name, Class<?>... parameterTypes) 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
// Method[] getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
// Object invoke(Object obj, Object... args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
// Class<?> getReturnType() 返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法的正式返回类型,即方法的返回类型
// Type getGenericReturnType() 返回表示由此 Method 对象所表示方法的正式返回类型的 Type 对象,也是方法的返回类型。
// Class<?>[] getParameterTypes() 按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。即返回方法的参数类型组成的数组
// Type[] getGenericParameterTypes() 按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的,也是返回方法的参数类型
// String getName() 以 String 形式返回此 Method 对象表示的方法名称,即返回方法的名称
// boolean isVarArgs() 判断方法是否带可变参数,如果将此方法声明为带有可变数量的参数,则返回 true;否则,返回 false。
// String toGenericString() 返回描述此 Method 的字符串,包括类型参数。
// Method m1 = userclazz.getDeclaredMethod("add",String.class,int.class);
// Method m2 = userclazz.getDeclaredMethod("del",String.class,int.class);
// m1.invoke((User)userclazz.newInstance(), "j",23);
// m2.setAccessible(true);
// m2.invoke((User)userclazz.newInstance(),"x",32);
4. 访问权限类 Modifier