通过反射--操作运行时类中的指定的属性/方法

  • 操作运行时类中的指定的属性:

1.getDeclaredField(String fieldName):获取运行类中指定变量名的属性;
2.保证当前属性时可访问的 : 属性.setAccessible(true);
3.获取、设置指定对象的此属性值 : 属性.set(); / 属性.get();

@Test
    public void testField1() throws Exception {
     
        Class clazz = Person.class;
        //创建运行时类的对象
        Person p = (Person)clazz.newInstance();

        //1. getDeclaredField(String fieldName):获取运行类中指定变量名的属性
        Field name = clazz.getDeclaredField("name");

        //2. 保证当前属性时可访问的
        name.setAccessible(true);
        //3. 获取、设置指定对象的此属性值
        name.set(p,"Mali");
        System.out.println(name.get(p));

    }
  • 操作运行时类中的指定的方法:
    1.getDeclaredMethod():参数1:指明获取的方法名称 参数2:指明获取方法的形参列表;
    2.保证当前方法可访问 : 方法名.setAccessible(true);
    3.调用 invoke(): 参数1:方法的调用者 参数2:给方法形参赋值的实参;
    invoke()的返回值即为对应类中调用的方法的返回值;
    @Test
    public void testMethod() throws Exception {
     
        Class clazz = Person.class;
        //创建运行时类的对象
        Person p = (Person)clazz.newInstance();

        /*1.获取指定的某个方法
        getDeclaredMethod():参数1:指明获取的方法名称   参数2:指明获取方法的形参列表
         */
        Method show = clazz.getDeclaredMethod("show", String.class);

        //2.保证当前方法可访问
        show.setAccessible(true);

         /*
        3. 调用 invoke(): 参数1:方法的调用者 参数2:给方法形参赋值的实参
        invoke()的返回值即为对应类中调用的方法的返回值
         */
        Object returnValue = show.invoke(p,"CHN"); //show()是有返回值的//String nation = p.show("CHN");
        System.out.println(returnValue);

        System.out.println("如何调用静态方法");

        //private static void showDesc(){
     
        Method showDesc = clazz.getDeclaredMethod("showDesc");
        showDesc.setAccessible(true);
        //如果调用的运行时类中的方法没有返回值,则invoke()返回null
        Object returnVal = showDesc.invoke(Person.class);
        System.out.println(returnVal); //返回值类型void,返回值就是null
    }

你可能感兴趣的:(笔记,java,反射)