public class ClassDemo2 {
/**
* @Author: www.itze.cn
* @Date: 2020/9/21 10:37
* @Email: 814565718@qq.com
*/
public static void main(String[] args) {
/**
* 要获取一个方法,就是获取一个类的信息,要获取类,就要先获取该类的类类型
*/
A a = new A();
Class<? extends A> aClass = a.getClass();
/**
* 获取方法
* getMethod()获取的时所有public的方法
* getDelcaredMethod()获取的时自己声明的方法
*/
try {
Method aClassDeclaredMethod = aClass.getMethod("print", new Class[]{int.class, int.class});
/**
* 方法的发射
* 见到参数中出现...可以使用该类型的数组形式或者直接参数形式
*/
//正常调用 a.print();
aClassDeclaredMethod.invoke(a, new Object[]{1, 1});
System.out.println("========================");
Method method = aClass.getMethod("print", String.class, String.class);
method.invoke(a, "hello", "Word");
/**
* 无参调用也是两种方式,
* 方式一:getMethod("方法名","new Class[]{}")
* 方式二:getMethod("方法名")
*/
Method priMethod = aClass.getMethod("print");
priMethod.invoke(a);
} catch (Exception e) {
e.printStackTrace();
}
}
}

class A {
public void print() {
System.out.println("This No Param Method");
}

public void print(int a, int b) {
System.out.println(a + b);
}

public void print(String a, String b) {
System.out.println(a.toUpperCase() + "," + b.toLowerCase());

}
}