Program to demonstrate Usage of Reflection API for getting methods name and return type in Java
Output of the program :
package com.hubberspot.reflection;
import java.lang.reflect.Method;
class Customer {
 // private fields
 private String firstname;
 private String lastname;
 private String email;
 private static int counter;
 // public method
 public String setFirstname( int count ) {
  return this.firstname = "Jonty";
 }
 // protected method
 protected String setLastname( String name ) {
  return lastname = "Magic";
 }
 // private method
 private String getEmail( String email ) {
  return email = "Jonty@Magic.com";
 }
 // default method
 void setEmail(String email) {
  this.email = email;
 }
 // static method
 public static int getCounter() {
  return counter;
 }
 public static void setCounter(int counter) {
  Customer.counter = counter;
 }
}
public class CustomerMethods {
   public static void main(String[] args) {
 // Create a test object. We can create
 // and apply reflection on any class 
 // we want without knowing which methods
 // it has. We are taking Customer here. 
 Customer customer = new Customer();
 // Getting Class associated with Customer
 Class custClass = customer.getClass();
 try {
           System.out.println("-----------------------------------");
    // Using Method class we can use method of any
    // class we want. Here we are getting method
    // setFirstname by calling getMethod method of the
    // Class associated with Customer 
    Method method = custClass.getMethod("setFirstname", new Class[] {int.class});
   
    // getParameterTypes() returns an array of parameter for the method
    Class[] parameterType = method.getParameterTypes();
            
    // getName() returns the name of the method
    System.out.println("Method Name : " + method.getName());
    // getReturnType().getName() returns the name of return type of method
    System.out.println("Method Return Type : " + method.getReturnType().getName());
    // parameterType[0].getName() return the parameter type name of first parameter  
    System.out.println("Method Parameter Type : " + parameterType[0].getName());
 } catch (SecurityException e) {
    e.printStackTrace();
 } catch (NoSuchMethodException e) {
  e.printStackTrace();
 }
 System.out.println("-----------------------------------");
   
        // getDeclaredMethods() returns an array of methods declared in 
 // class itself
 Method[] methods = custClass.getDeclaredMethods();
 System.out.println("No. Methods in Customer : " + methods.length);
 for (Method method : methods) {
  System.out.println("Method Name : "  + method.getName());
  System.out.println("Method Return Type : " + method.getReturnType().getName());
 Class[] parameterTypes = method.getParameterTypes();
 for (Class classCustomer : parameterTypes) {
  System.out.println("Method Parameter Type : " + classCustomer.getName());
 }
 System.out.println("-----------------------------------");
     }
     System.out.println("-----------------------------------");
        
     // getMethods() returns an array of methods declared in class and 
     // in superclasses too
     methods = custClass.getMethods();
     System.out.println("No. Methods in Customer : " + methods.length);
     for (Method method : methods) {
 System.out.println("Method Name : "  + method.getName());
 System.out.println("Method Return Type : " + method.getReturnType().getName());
 Class[] parameterTypes = method.getParameterTypes();
 for (Class classCustomer : parameterTypes) {
    System.out.println("Method Parameter Type : " + classCustomer.getName());
 }
 System.out.println("-----------------------------------");
 }
   }   
}
Output of the program :


