Download the JDK
Search the Tutorials
Hide the TOC
Trail: The Reflection API
Lesson: Manipulating Objects
Manipulating Objects
Creating Objects
Using No-Argument Constructors
Using Constructors that Have Arguments
Getting Field Values
Setting Field Values
Invoking Methods
Home Page > The Reflection API > Manipulating Objects
« Previous • Trail • Next »
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.

« Previous • Trail • Next »
Previous page: Setting Field Values
Next page: Working with Arrays