私有化构造方法操作
直接操作使用对应私有化构造方法Constructor类对象,是没有权限操作的,因为private修饰。但是反射【为所欲为!!!不破不立!!!】这里可以给予私有化内容操作权限;void setAccessibe(boolean flag);
该方法是可以通过【Constructor构造方法,Method成员方法,Field成员变量】调用,给予暴力反射私有化内容类外操作权限;
获取Method类对象
【重点】
①成员方法的内容:
<1>返回值类型;
<2>方法名;
<3>形式参数列表;
<4>权限修饰符;
②调用方法时:
方法名(参数)
public void game();
public void game(String);
类内同名方法,需要通过方法的参数来区分,这里就是方法的【重载】 获取一个Method成员方法类对象,需要的内容
1.方法名;
2.参数类型,个数,顺序;
通过Class类对象获取Method对象方法
<1>Method[] getMethods(); 获取类内所有的非私有化成员方法,包括从【父类继承而来的子类】可以使用的成员方法;
<2>Method[] getDeclaredmethods();获取类内的所有方法,包含【私有化成员方法】,但是【不包括父类继承到子类】的成员方法【暴力反射】
<3>Method getMethod(String methodName,Class… parameterTypes); 根据指定的方法名,和对应的参数类型,个数,顺序获取对应的成员方法Method类对象;可以获取类内的【非私有化成员方法】,和【父类继承到子类的成员方法】;
methodName
是方法名;Class...
不定长参数,根据方法的数据类型来选择对应的成员方法;
例如:
public void game()
; Class类对象.getMethod(“game”);
public void game(String game)
; Class类对象.getMethod(“game”,String.class);
<4>Method getDeclaredmethod(String methodName,Class… parameterTypes);根据指定的方法名,和对应的参数类型,个数,顺序,获取类内的成员方法,包含【私有化成员方法】,但是【不包括父类继承到子类】的方法【暴力反射】
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;
}
}