这一章我们通过Java的方法反射的基本操作,话不多说直接上代码。
package com.wangjinduo;
import java.lang.reflect.Method;
public class ClassDemo {
public static void main(String[] args) {
/*
* 要获取print(int numberA, int numberB)方法 首先要获取类的信息 获取类的信息首先要获取类的类类型
*/
TestDemo testDemo = new TestDemo();
// 获取类的类类型
Class c = testDemo.getClass();
/*
* 通过方法名称和参数列表来获取方法 第一种方式:c.getDeclaredMethod("print", new Class[] {int.class.
* int.class}); 在本类所有方法中查找 第二种方式:c.getMethod("print", int.class, int.class); 同上
* 第一种方式:c.getMethod("print", new Class[] {int.class. int.class});
* 在所有public方法中查找(注:包含继承而来的public方法) 第二种方式:c.getMethod("print", int.class,
* int.class);
*/
try {
/*
* 方法的反射操作就是使用m1对象来进行方法调用 和之前的TestDemo testDemo = new TestDemo();
* testDemo.parint(10, 20); 同样的效果
*/
Method m1 = c.getMethod("print", int.class, int.class);
Object o1 = m1.invoke(testDemo, new Object[] { 10, 20 });
System.out.println(o1);
// 如果方法有返回值则o1是该返回值 如果该方法是个void则o1是null
System.out.println("----------------------");
Method m2 = c.getMethod("print", String.class, String.class);
Object o2 = m2.invoke(testDemo, new Object[] { "wang", "liu" });
System.out.println(o2);
System.out.println("----------------------");
Method m3 = c.getMethod("subtract", double.class, double.class);
Object o3 = m3.invoke(testDemo, new Object[] { 666, 888 });
System.out.println(o3);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class TestDemo {
public void print(int numberA, int numberB) {
System.out.println(numberA + " + " + numberB + " = " + (numberA + numberB));
}
public void print(String strA, String strB) {
System.out.println(strA.toUpperCase() + " - " + strB.toLowerCase());
}
public double subtract(double numberA, double numberB) {
return numberA - numberB;
}
}
如果需要学习获取成员变量构造函数信息,请看我的上一篇博文:Java 反射 ---- 获取成员变量构造函数信息
小弟初来乍到如有不对的地方请大神指出。