//在不确定使用哪种方法的时候,可以使用反射来获取字节码对象,并使用字节码对象来调取其相关方法
public class Test { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException { //创建对象 MathUtil mu = new MathUtil(); Scanner sc = new Scanner(System.in); System.out.println("请输入第一个数字"); int i = sc.nextInt(); System.out.println("请输入第二个数字"); int i1 = sc.nextInt(); System.out.println("请输入要调用的方法"); String next = sc.next(); //反射 //第一种:通过类名.class 获取字节码对象 //Class<MathUtil>muClass = MathUtil.class; //第二种:通过对象的getClass方法获取字节码对象 // Class<? extends MathUtil> muClass = mu.getClass(); //第三种:通过Class的静态方法forName("全类名") -----> 全类名 = 包名 +"."+ 类名),来获取字节码对象 Class<?> muClass = Class.forName("com.homework.test2.MathUtil"); //通过字节码对象获取方法 Method method = muClass.getMethod(next, int.class, int.class); //方法对象调用invoke让成员方法执行起来 Object invoke = method.invoke(mu, i, i1); System.out.println(invoke); } } //定义一个类,在类中创建n个方法
public class MathUtil { public int add(int a,int b){ return a+b; } public int minu(int a, int b){ return a - b; } public int multi(int a, int b){ return a * b; } public int by (int a, int b){ return a / b; } }