0
点赞
收藏
分享

微信扫一扫

112.私有化构造方法操作;获取Method类对象;通过Class类对象获取Method对象方法

西街小学的王 2022-01-30 阅读 42

私有化构造方法操作

直接操作使用对应私有化构造方法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;
    }
}
举报

相关推荐

0 条评论