假设有如下类:

package com.test.reflect;

public class Person

{

    private int age;

    private String name;

    public Persion()

    {

    }

    public Persion(String name)

    {

        this.name = name;

    }

    public Persion(String name,int age)

    {

        this(name);

        this.age = age;

    }

    public void setName(String name)

    {

        this.name = name;

    }

    public void setAge(int age)

    {

        this.age = age;

    }

    @hide

    public void setAll(String name,int age)

    {

        setName(name);

        setAge(age);

    }

    private int getAge()

    {

        return age;

    }

    

    public String getName()

    {

        return name;

    }      

}


因为getAge()和setAll()是private方法和@hide注解,平常对象无法进行调用.为了是能使用这两个方法,可通过反射:

public class ReflectDemo

{

    public static void main(String[] args) throws Exception

    {

        //获取类引用

        Class class = Class.forName("com.test.reflect.Persion");

        //实例化Person对象

       // Persion persion = (Persion)class.newInstance();//Persion无参构造函数 

         Persion persion = (Persion)class.newInstance("xiaoming",20);

        //获取setAll函数

        Method setAll = class.getMethod("setAll",String.class,int.class);

        //调用setAll函数

        setAll.invoke(persion,"xiaohong",18);

        //获取getAge函数

        Method getAge = class.getMethod("getAge");

        //调用getAge函数

        int age = (int)getAge.invoke(persion);

        System.out.println("name:"+persion.getName()+" age:"+age);

    }

}