The Java TM Tutorial

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

Trail: The Reflection API
Lesson: Manipulating Objects

## Invoking Methods

> Suppose that you are writing a debugger that allows the user to select and then invoke methods during a debugging session. Since you don't know at compile time which methods the user will invoke, you cannot hardcode the method name in your source code. Instead, you must follow these steps:
> 1. Create a `Class` object that corresponds to the object whose method you want to invoke. See the section Retrieving Class Objects for more information.
> 2. Create a `Method` object by invoking `getMethod` on the `Class` object. The `getMethod` method has two arguments: a `String` containing the method name, and an array of `Class` objects. Each element in the array corresponds to a parameter of the method you want to invoke. For more information on retrieving `Method` objects, see the section Obtaining Method Information
> 3. Invoke the method by calling `invoke`. The `invoke` method has two arguments: an array of argument values to be passed to the invoked method, and an object whose class declares or inherits the method.

> The sample program that follows shows you how to invoke a method dynamically. The program retrieves the `Method` object for the `String.concat` method and then uses `invoke` to concatenate two `String` objects.

> >     import java.lang.reflect.*;

> >     class SampleInvoke {

> >        public static void main(String[] args) {
> >           String firstWord = "Hello ";
> >           String secondWord = "everybody.";
> >           String bothWords = append(firstWord, secondWord);
> >           System.out.println(bothWords);
> >        }

> >        public static String append(String firstWord, String secondWord) {
> >           String result = null;
> >           Class c = String.class;
> >           Class[] parameterTypes = new Class[] {String.class};
> >           Method concatMethod;
> >           Object[] arguments = new Object[] {secondWord};
> >           try {
> >             concatMethod = c.getMethod("concat", parameterTypes);
> >             result = (String) concatMethod.invoke(firstWord, arguments);
> >           } catch (NoSuchMethodException e) {
> >               System.out.println(e);
> >           } catch (IllegalAccessException e) {
> >               System.out.println(e);
> >           } catch (InvocationTargetException e) {
> >               System.out.println(e);
> >           }
> >           return result;
> >        }
> >     }

> The output of the preceding program is:

> >     Hello everybody.

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