The Java TM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search

Trail: The Reflection API
Lesson: Examining Classes

## Obtaining Method Information

> To find out what public methods belong to a class, invoke the method named `getMethods`. The array returned by `getMethods` contains `Method` objects. You can use a `Method` object to uncover a method's name, return type, parameter types, set of modifiers, and set of throwable exceptions. All of this information would be useful if you were writing a class browser or a debugger. With `Method.invoke`, you can even call the method itself. To see how to do this, see the section Invoking Methods.

> The following sample program prints the name, return type, and parameter types of every public method in the `Polygon` class. The program performs the following tasks:

> 1. It retrieves an array of `Method` objects from the `Class` object by calling `getMethods`.
> 2. For every element in the `Method` array, the program:
>    1. retrieves the method name by calling `getName`
>    2. gets the return type by invoking `getReturnType`
>    3. creates an array of `Class` objects by invoking `getParameterTypes`
> 3. The array of `Class` objects created in the preceding step represents the parameters of the method. To retrieve the class name for every one of these parameters, the program invokes `getName` against each `Class` object in the array.
> Not many lines of source code are required to accomplish these tasks:

> >     import java.lang.reflect.*;
> >     import java.awt.*;

> >     class SampleMethod {

> >        public static void main(String[] args) {
> >           Polygon p = new Polygon();
> >           showMethods(p);
> >        }

> >        static void showMethods(Object o) {
> >           Class c = o.getClass();
> >           Method[] theMethods = c.getMethods();
> >           for (int i = 0; i < theMethods.length; i++) {
> >              String methodString = theMethods[i].getName();
> >              System.out.println("Name: " + methodString);
> >              String returnString =
> >                theMethods[i].getReturnType().getName();
> >              System.out.println("   Return Type: " + returnString);
> >              Class[] parameterTypes = theMethods[i].getParameterTypes();
> >              System.out.print("   Parameter Types:");
> >              for (int k = 0; k < parameterTypes.length; k ++) {
> >                 String parameterString = parameterTypes[k].getName();
> >                 System.out.print(" " + parameterString);
> >              }
> >              System.out.println();
> >           }
> >        }
> >     }

> An abbreviated version of the output generated by the sample program is as follows:

> >     Name: equals
> >        Return Type: boolean
> >        Parameter Types: java.lang.Object
> >     Name: getClass
> >        Return Type: java.lang.Class
> >        Parameter Types:
> >     Name: hashCode
> >        Return Type: int
> >        Parameter Types:
> >     .
> >     .
> >     .
> >     Name: intersects
> >        Return Type: boolean
> >        Parameter Types: double double double double
> >     Name: intersects
> >        Return Type: boolean
> >        Parameter Types: java.awt.geom.Rectangle2D
> >     Name: translate
> >        Return Type: void
> >        Parameter Types: int int

| Start of Tutorial > Start of Trail > Start of Lesson | Search