步驟:
擷取方法所在類的位元組碼對象
擷取類中的方法
概述:
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);
}
}
運作結果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI3cDOxI2NyAzNiJGMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
運作結果