天天看點

java反射擷取類方法,javaSE使用反射擷取類中的方法

步驟:

擷取方法所在類的位元組碼對象

擷取類中的方法

概述:

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);

}

}

運作結果:

java反射擷取類方法,javaSE使用反射擷取類中的方法

運作結果