Reflection Java

// : c10:ShowMethods.java
// Using reflection to show all the methods of a class,
// even if the methods are defined in the base class.
// {Args: ShowMethods}
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.regex.Pattern;
public class ShowMethods {
  private static final String usage = "usage: \n"
      + "ShowMethods qualified.class.name\n"
      + "To show all methods in class or: \n"
      + "ShowMethods qualified.class.name word\n"
      + "To search for methods involving 'word'";
  private static Pattern p = Pattern.compile("\\w+\\.");
  public static void main(String[] args) {
    if (args.length < 1) {
      System.out.println(usage);
      System.exit(0);
    }
    int lines = 0;
    try {
      Class c = Class.forName(args[0]);
      Method[] m = c.getMethods();
      Constructor[] ctor = c.getConstructors();
      if (args.length == 1) {
        for (int i = 0; i < m.length; i++)
          System.out.println(p.matcher(m[i].toString())
              .replaceAll(""));
        for (int i = 0; i < ctor.length; i++)
          System.out.println(p.matcher(ctor[i].toString())
              .replaceAll(""));
        lines = m.length + ctor.length;
      } else {
        for (int i = 0; i < m.length; i++)
          if (m[i].toString().indexOf(args[1]) != -1) {
            System.out.println(p.matcher(m[i].toString())
                .replaceAll(""));
            lines++;
          }
        for (int i = 0; i < ctor.length; i++)
          if (ctor[i].toString().indexOf(args[1]) != -1) {
            System.out.println(p.matcher(ctor[i].toString())
                .replaceAll(""));
            lines++;
          }
      }
    } catch (ClassNotFoundException e) {
      System.out.println("No such class: " + e);
    }
  }
} ///:~