Java基础巩固系列 通过反射调用指定的属性、方法、构造器

属性:

//调用运行时类中指定的属性
    @Test
    public void test3() throws Exception {
        Class clazz = Person.class;

        //1.获取指定的属性
        //getField(String fieldName):获取运行时类中声明为public的指定属性名为fieldName的属性
        Field name = clazz.getField("name");
        //2.创建运行时类的对象
        Person p = (Person) clazz.newInstance();
        System.out.println(p);
        //3.将运行时类的指定的属性赋值
        name.set(p, "Jerry");
        System.out.println(p);

        System.out.println();
        //getDeclaredField(String fieldName)获取运行时类中指定名为fieldName的属性
        Field age = clazz.getDeclaredField("age");
        //由于属性权限修饰符的限制,为了保证可以给属性赋值,需要在操作前是的此属性可被操作
        age.setAccessible(true); //可访问的
        age.set(p, 10);
        System.out.println(p);

//        Field id = clazz.getField("id");
    }

结果:

Person{name='null', age=0}
Person{name='Jerry', age=0}

Person{name='Jerry', age=10}

 

方法:

 //调用运行时类中的指定方法
    @Test
    public void test3() throws Exception {
        Class clazz = Person.class;

        //getMethod(String name, Class<?>... parameterTypes):获取运行时类中声明为public的指定的方法
        Method m1 = clazz.getMethod("show");
        Person p = (Person) clazz.newInstance();
        //调用指定的方法:Object invoke(Object obj, Object... args)
        Object returnVal = m1.invoke(p);//我是一个人!
        System.out.println(returnVal);//null

        Method m2 = clazz.getMethod("toString");
        Object returnVal1 = m2.invoke(p);
        System.out.println(returnVal1); //Person{name='null', age=0}

        //对于运行时类中静态方法的调用
        Method m3 = clazz.getMethod("info");
        m3.invoke(Person.class);

        //getDeclaredMethod(String name, Class<?>... parameterTypes)获取运行时类中声明了的指定的方法
        Method m4 = clazz.getDeclaredMethod("display", String.class, Integer.class);
        m4.setAccessible(true);
        Object value = m4.invoke(p, "CHN", 10);//我的国籍是CHN
        System.out.println(value); //10
    }

结果:

我是一个人!
null
Person{name='null', age=0}
中国人!
我的国籍是CHN
10

 

构造器:

    //调用指定的构造器
    @Test
    public void test3() throws Exception {
        String className = "com.peter.java19.Person";
        Class clazz = Class.forName(className);

        Constructor cons = clazz.getDeclaredConstructor(String.class, int.class);
        cons.setAccessible(true);
        Person p = (Person) cons.newInstance("小明", 23);
        System.out.println(p);
    }

结果:

Person{name='小明', age=23}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值