私有化构造方法操作
直接操作使用对应私有化构造方法Constructor类对象,是没有权限操作的,因为private修饰。但是反射【为所欲为!!!不破不立!!!】这里可以给予私有化内容操作权限;void setAccessibe(boolean flag);
该方法是可以通过【Constructor构造方法,Method成员方法,Field成员变量】调用,给予暴力反射私有化内容类外操作权限;
获取Method类对象
【重点】
通过Class类对象获取Method对象方法
例如:
class Panda{
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//创建Class类对象
Class test = Test.class;
//获取Class类对象的所有【非私有化成员方法】
Method[] methods = test.getMethods();
//获取Class类对象所有成员方法【包括私有化成员方法】【暴力反射】
Method[] methods1 = test.getDeclaredMethods();
//根据指定的方法名,和对应的参数类型,个数,顺序获取指定的成员方法类对象,
//获取【非私有化成员方法】,和【父类继承到子类】的成员方法;
//参数分别是 (String methodName,Class...parameterTypes);方法名+方法里面原来参数
//获取test() 成员方法 没有参数
Method method = test.getMethod("test");
//根据指定的方法名,和对应的参数类型,个数,顺序获取指定的成员方法类对象
//获取【包括私有化成员方法】但【不包括子类继承父类成员方法】【暴力反射】
//获取成员方法test(String name,Integer age) 参数传入String.class,Integer.class
Method method1 = test.getDeclaredMethod("test",String.class,Integer.class);
}
}
@Data
public class Test{
//成员变量
private String name;
private Integer age;
private String sex;
//无参构造方法
public Test(){}
//有参构造方法
public Test(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
private Test(String name, Integer age){
this.name = name;
this.age = age;
}
//公有成员方法
public String test(){
return "小哈";
}
//公有成员方法
public String test(String name,Integer age){
return name+age;
}
//私有成员方法【重载】
private String test(String message){
return message;
}
}