/**
*
*/
package cn.thcic;
import java.lang.reflect.Method;
/**
* java反射---获取类的方法
* <p>
*
* </p>
* by Zhiwang Zhang on 2014年7月21日
*/
public class Test109 {
public static void main(String[] args) {
// 通过Class类来获取类的方法,共有以下四种方法:
// 1、public Method[] getMethods(),获取所有的共有方法的集合
Class classInfo = Test109.class;
Method[] methods = classInfo.getMethods();
System.out.println("public方法共有:" + methods.length);
if (methods != null) {
for (Method m : methods) {
System.out.println(m.toString());
}
}
// 2、public Method[] getDeclaredMethods(),获取所有的方法,不包括继承的方法
Method[] methodsSec = classInfo.getDeclaredMethods();
System.out.println("Test109的所有方法共有:" + methodsSec.length);
if (methodsSec != null) {
for (Method m : methodsSec) {
System.out.println(m.toString());
}
}
// 3、public Method getMethod(String name,Class<?>...
// parameterTypes),获取指定公有方法 参数1:方法名 参数2:参数类型集合
try {
Method methodForRun = classInfo.getMethod("run", String.class,
Long.class);
// invoke(Object obj, Object... args),对带有指定参数的指定对象调用由此
// Method对象表示的基础方法。
Test109 test = (Test109) classInfo.newInstance();
methodForRun.invoke(test, "zzw", 1L);
} catch (Exception e) {
e.printStackTrace();
}
// 4、public Method getDeclaredMethod(String name,Class<?>...
// parameterTypes) 获取任意指定方法
try {
Method methodForSleep = classInfo.getDeclaredMethod("sleep",
String.class);
Test109 testSec = (Test109) classInfo.newInstance();
int i = (int) methodForSleep.invoke(testSec, "lwz");
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(String name, Long age) {
System.out.println("公有run()方法...");
}
private int sleep(String name) {
System.out.println("私有sleep()方法...");
return 1;
}
}