java的反射机制真的很强大,在这里总结了一些Method的基本应用。
java">import java.lang.reflect.Method;
import java.util.Date;
javadoc">/**
* ReflectMethod.java
* 2017年11月8日
*利用反射来调用方法并执行
*/
class Person{
public void doWork(){
System.out.println("Person.doWork()");
}
public String doWork(String name){
System.out.println("Person.doWork():"+name);
return name;
}
private String sayHello(String name, int age){
System.out.println("Person.doWork():"+name+age);
return name+":"+age;
}
}
public class ReflectMethod {
public static void main(String[] args) throws Exception {
//1.调用person类中的doWork()方法
Class cla=Person.class;
//获取doWork()方法
Method m=cla.getMethod("doWork");
//创建cla的对象调用doWork方法,ret为返回值,由于该方法没有返回值,所以输出NULL
Object ret = m.invoke(cla.newInstance());
System.out.println(ret);
/*输出:Person.doWork()
null
*/
//2.调用person类中的doWork(String name)方法
m=cla.getMethod("doWork", String.class);
ret=m.invoke(cla.newInstance(), "Will");
System.out.println(ret);
/*输出:Person.doWork():Will
Will
*/
//3.调用person类中的私有方法:sayHello(String name, int age)
m=cla.getDeclaredMethod("sayHello", String.class,int.class);
//设置可访问私有的成员
m.setAccessible(true);
ret=m.invoke(cla.newInstance(), "Will",17);
System.out.println(ret);
/*输出:Person.doWork():Will17
Will:17
*/
//将日期类赋给Object对象来调用Date中的方法
Object obj=new java.util.Date();//此时obj不能调用Date中的方法,他是Object对象
//通过getClass()方法来获取obj的真实类.并获取toLocalString方法
Method m1=obj.getClass().getMethod("toLocaleString");
Object s=m1.invoke(obj);
System.out.println(s);//2017-11-8 15:46:02
}
}