直接 *** 作使用对应私有化构造方法Constructor类对象,是没有权限 *** 作的,因为private修饰。但是反射【为所欲为!!!不破不立!!!】这里可以给予私有化内容 *** 作权限;void setAccessibe(boolean flag); 该方法是可以通过【Constructor构造方法,Method成员方法,Field成员变量】调用,给予暴力反射私有化内容类外 *** 作权限;
获取Method类对象【重点】
①成员方法的内容:
<1>返回值类型;
<2>方法名;
<3>形式参数列表;
<4>权限修饰符;
②调用方法时:
方法名(参数)
public void game();
public void game(String);
通过Class类对象获取Method对象方法类内同名方法,需要通过方法的参数来区分,这里就是方法的【重载】 获取一个Method成员方法类对象,需要的内容
1.方法名;
2.参数类型,个数,顺序;
<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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)