classObj.getMethod 方法

Class.getMethod()方法, 获取指定类的 public 方法。

我们定义一个员工类 Employee, 设置一个带参构造方法。

public class Employee {

    private int empno;
    private String empname;
    private int salary;

    static {
        System.out.println("类已被加载到JVM");
    }

    public Employee(int empno, String empname, int salary) {
        this.empno = empno;
        this.empname = empname;
        this.salary = salary;
        System.out.println("带参构造方法被执行");
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empno=" + empno +
                ", empname='" + empname + '\'' +
                ", salary=" + salary +
                '}';
    }

    public void updateSal(int val){
        salary+=val;
        System.out.println(empname + "调薪至: " + salary +"元");
    }

}

我们依然通过反射机制 来创建Employee对象, 然后也通过反射机制来获取指定类的public方法。

public static void main(String[] args) {

        try {
            //将 指定 类加载到 JVM, 并返回Class 对象
            Class empClass = Class.forName("indi.chester.methoddemo.Employee");
            
            // 通过 Class 对象.getConstructor() 获得 Constructor 对象
            Constructor empConstructor= empClass.getConstructor(new Class[]{int.class, String.class,int.class});

            //通过Constructor对象.newInstance() 调代参构造函数 创建对象
            Employee emp1=(Employee) empConstructor.newInstance( new Object[] {20200189,"Tom",10000});

            //通过 Class 对象.getMethod() 获得 Method 对象
            Method updateSalMethod= empClass.getMethod("updateSal",new Class[]{int.class});

            //通过Method 对象.invoke 可以执行某个对象的函数
            updateSalMethod.invoke(emp1,new Object[]{2000});
            System.out.println(emp1);
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }


    }

与一节相比,这段代码主要有两行不同。

empClass.getMethod() 获得 Employee 类的public修饰的方法的 Method 对象。empClass.getMethod()传入两个参数, 一个是 方法名, 另一个是该方法的参数列表。

Method updateSalMethod= empClass.getMethod("updateSal",new Class[]{int.class});

随后可以通过 updateSalMethod 对 emp1 的 updateSal 进行调用。

//通过Method 对象.invoke 可以执行某个对象的函数
updateSalMethod.invoke(emp1,new Object[]{2000});

updateSalMethod.invoke() 方法传入两个参数, 一个是 对象名, 一个是参数列表。

最后运行程序,输出结果如下:

类已被加载到JVM
带参构造方法被执行
Tom调薪至: 12000元
Employee{empno=20200189, empname='Tom', salary=12000}

Last updated

Was this helpful?