步骤:
- 获取方法所在类的字节码对象
- 获取类中的方法
概述:
class类中常用方法:
public Method[] getMethods();//获取包括自身和继承过来的所有的public方法
public Method[] getDeclaredMethods();//获取自身类中所有的方法(不包括继承的,和访问权限无关)
public Method getMethod(String methodName , class<?>...);//获取指定的public方法
public Method getDeclaredMethod(String methodName , class<?>...);//获取自身类中指定的方法(不包括继承的,和访问权限无关)
参数:
- methodName:表示被调用方法的名字
- class<?>:表示被调用方法的参数的class类型
代码:
//类中的方法
class User {
public void dowork() {
}
public void dowork(String name) {
}
private String sayHello(String name, int age) {
return name + "," + age;
}
}
public class GetMethodDemo {
//获取所有方法
public static void main(String[] args) throws Exception {
getAllMethods();
System.out.println("-------------------------------------");
getOneMethod();
}
private static void getAllMethods() {
Class clz = User.class;
//获取包括继承和借口的所有方法
Method[] ms1 = clz.getMethods();
for (Method ms : ms1) {
System.out.println(ms);
}
//获取自身的的所有方法
Method[] ms2 = clz.getDeclaredMethods();
for (Method ms : ms2) {
System.out.println(ms);
}
}
//获取指定方法
private static void getOneMethod() throws Exception {
Class clz = User.class;
//获取无参数的dowork方法
Method m = clz.getDeclaredMethod("dowork");
System.out.println(m);
//获取有参数的dowork方法
m = clz.getMethod("dowork",String.class);
System.out.println(m);
//获取私有的有参数的sayHello方法
m = clz.getDeclaredMethod("sayHello",String.class,int.class);
System.out.println(m);
}
}