Program to demonstrate method invocation in Java using Method class in Reflection API
Output of the program :
package com.hubberspot.example;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class Operations {
   public int add(int num1, int num2) {
 return num1 + num2;
   }
   public int subtract(int num1, int num2) {
 return num1 - num2;
   }
   public int multiply(int num1, int num2) {
 return num1 * num2;
   }
   public double division(int num1, int num2) {
 return num1 / num2;
   }
}
public class MethodInvocation {
   public static void main(String[] args) {
 // Creating Object of Operations
 Operations operation = new Operations();
 // Getting the Class associated with Operations
 Class classOperations= operation.getClass();
   try {
  // Calling getMethod method on classOperations
  // by passing a string which specifies method
  // name and two instance of Class which denotes
  // an int parameter type
  Method add = classOperations.getMethod("add",new Class[] {int.class,int.class});
  // calling the invoke method over the Method
  // by passing it the object of class to 
  // which the method is going to be invoked
  // alongwith an array of Object which specified 
  // the parameters 
  Object result = add.invoke(operation,new Object[] { 20 , 20});
  System.out.print("Calling "+add.getName()+
   " method and result is : ");
  System.out.println(result.toString());
  // Calling getMethod method on classOperations
  // by passing a string which specifies method
  // name and two instance of Class which denotes
  // an int parameter type
  Method subtract = classOperations.getMethod("subtract",new Class[] {int.class,int.class});
  // calling the invoke method over the Method
  // by passing it the object of class to 
  // which the method is going to be invoked
  // alongwith an array of Object which specified 
  // the parameters
  result = subtract.invoke(operation, 
   new Object[] { 30 , 20});
  System.out.print("Calling "+subtract.getName()+ " method and result is : ");
  System.out.println(result.toString());
  // Calling getMethod method on classOperations
  // by passing a string which specifies method
  // name and two instance of Class which denotes
  // an int parameter type
  Method multiply = classOperations.getMethod("multiply",new Class[] {int.class,int.class});
  // calling the invoke method over the Method
  // by passing it the object of class to 
  // which the method is going to be invoked
  // alongwith an array of Object which specified 
  // the parameters
  result = multiply.invoke(operation, new Object[] { 10 , 10});
  System.out.print("Calling "+multiply.getName()+ " method and result is : ");
  System.out.println(result.toString());
  // Calling getMethod method on classOperations
  // by passing a string which specifies method
  // name and two instance of Class which denotes
  // an int parameter type
  Method division = classOperations.getMethod("division", new Class[] {int.class,int.class});
  // calling the invoke method over the Method
  // by passing it the object of class to 
  // which the method is going to be invoked
  // alongwith an array of Object which specified 
  // the parameters
  result = division.invoke(operation, new Object[] { 20 , 10});
  System.out.print("Calling "+division.getName()+ " method and result is : ");
  System.out.println(result.toString());
  } catch (SecurityException e) {
  e.printStackTrace();
 } catch (NoSuchMethodException e) {
  e.printStackTrace();
 } catch (IllegalArgumentException e) {
  e.printStackTrace();
 } catch (IllegalAccessException e) {
  e.printStackTrace();
 } catch (InvocationTargetException e) {
  e.printStackTrace();
 }
   }
}
Output of the program :
 

 
