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?