??以前,我們調用一個類里面的方法,通常通過對象名來進行操作。今天我們通過反射機制來調用類里面的方法,包括私有的方法也可以調用。
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);
}
}