以前,我们调用一个类里面的方法,通常通过对象名来进行操作。今天我们通过反射机制来调用类里面的方法,包括私有的方法也可以调用。
package com.example.Reflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MethodDemo1 {
public static void main(String[] args) {
A a = new A();
Class c1 = a.getClass();
/**
* 通过getMethod
*/
try {
/**获得print(int , int)方法
*
*/
//Method method = c1.getMethod("print", new Class[]{int.class, int.class});
Method method = c1.getMethod("print", int.class, int.class);
/**
* 如果方法返回值类型为空的话,则下面的调用返回的值null
* 否则返回的是Object的对象
*/
//Object invoke = method.invoke(a, new Object[]{10, 20});
Object invoke = method.invoke(a, 10, 20);
/**
* 获得print()方法
*/
//method = c1.getMethod("print");
method = c1.getMethod("print", new Class[]{});
//method.invoke(a);
method.invoke(a, new Object[]{});
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class A
{
public void print()
{
System.out.println("hello world");
}
public void print(int a, int b)
{
System.out.println(a + b);
}
public void print(String a, String b)
{
System.out.println(a + ", " + b);
}
}