The following examples shows how to call methods dynamically using reflection.

 import java.lang.reflect.*;
import java.io.*;

public class testReflect {
   public static void main(String s[]) {
      testReflect t = new testReflect();
      try {
         t.doit();
         }
      catch (Exception e) {
         e.printStackTrace();
         }
      }
   public void doit() throws Exception {
      String aClass;
      String aMethod;   
      // we assume that called methods have no argument
      Class params[] = {};
      Object paramsObj[] = {};
      
      while (true) {
         /* examples 
            Class: class1         Method: class1Method2
            Class: java.util.Date Method: toString
            Class: java.util.Date Method: getTime
         */
         aClass  = Input.Line("\nClass : ");
         aMethod = Input.Line("Method: ");
         // get the Class
         Class thisClass = Class.forName(aClass);
         // get an instance 
         Object iClass = thisClass.newInstance();
         // get the method
         Method thisMethod = thisClass.getDeclaredMethod(aMethod, params);
         // call the method
         System.out.println(thisMethod.invoke(iClass, paramsObj).toString());
         }
      }
   
   static class Input {
     public static String Line(String s) throws IOException {
         BufferedReader input = 
             new BufferedReader(new InputStreamReader(System.in));
         System.out.print(s);
         return input.readLine();     
        }
     }
}

class class1 {
   public String class1method1() {
      return "*** Class 1, Method1 ***";
      }
   public String class1method2() {
      return "### Class 1, Method2 ###";
      }
}

The next example calls a class method with 2 arguments:
import java.lang.reflect.*;

public class TestReflect {
  static void invoke(String aClass, String aMethod, Class[] params, Object[] args) {
    try {
      Class c = Class.forName(aClass);
      Method m = c.getDeclaredMethod(aMethod, params);      
      Object i = c.newInstance();
      Object r = m.invoke(i, args);
      } 
    catch (Exception e) {
      e.printStackTrace();
      } 
    }

  public static void main(String[] args) {
    invoke("Class1", "say", new Class[] {String.class, String.class}, 
           new Object[] 
             {new String("Hello"), new String("World")});
    }
}

class Class1 {
  public void say( String s1, String s2) {
    System.out.println(s1 + " " + s2);
    }
}