方法的反射
- 获取某个方法:通过方法名称和方法的参数列表唯一确定某个方法
- 方法的反射操作
method.invoke(对象,参数列表)
方法的反射步骤
- 获取一个方法,首先要获取类的信息,获取类的信息必须先获取类的类类型
- 获取方法由名称和参数列表来决定
getMethod()获取的是public的方法
getDeclaredMethod()方法获取的是自己生成的方法
方法的反射实例
方法如果没有返回值,返回null,有返回值则返回具体的返回值
public class MethodDemo {
public static void main(String[] args) {
//获取print(int,int)方法
//1.获取一个方法,首先要获取类的信息,获取类的信息必须先获取类的类类型
A a1 = new A();
Class c = a1.getClass();
//2.获取方法由名称和参数列表来决定
/**
* 2.获取方法由名称和参数列表来决定
* getMethod获取的是public的方法
* getDeclaredMethod方法获取的是自己生成的方法
*/
// Method m = c.getMethod("print", new Class[]{int.class, int.class});
try {
Method m = c.getMethod("print", int.class, int.class);
a1.print(10,20);
//方法的反射操作是用m对象来进行方法调用和a1.print()调用效果是一样的
// m.invoke(a1,new Object[]{10,20});
//方法如果没有返回值,返回null,有返回值则返回具体的返回值
Object obj = m.invoke(a1, 10, 20);
System.out.println("==================================================");
a1.print("hello","WORLD");
Method m1 = c.getMethod("print", String.class, String.class);
Object invoke = m1.invoke(a1, "a", "B");
System.out.println("==================================================");
a1.print();
Method m2 = c.getMethod("print",new Class[]{});
m2.invoke(a1);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}