    01: import java.lang.reflect.*;
    02: import java.util.*;
    03:
    04: /**
    05:    This program shows how to use reflection to print
    06:    the names and values of all fields of an object.
    07: */
    08: public class FieldTest
    09: {
    10:    public static void main(String[] args)
    11:       throws IllegalAccessException
    12:    {
    13:       String input = "Hello, World!";
    14:       StringTokenizer tokenizer = new StringTokenizer(input, ",");
    15:       System.out.print(spyFields(tokenizer));
    16:       tokenizer.nextToken();
    17:       System.out.println("\nAfter calling nextToken:\n");
    18:       System.out.print(spyFields(tokenizer));
    19:    }
    20:
    21:    /**
    22:       Spies on the field names and values of an object.
    23:       @param obj the object whose fields to format
    24:       @return a string containing the names and values of
    25:       all fields of obj
    26:    */
    27:    public static String spyFields(Object obj)
    28:       throws IllegalAccessException
    29:    {
    30:       StringBuffer buffer = new StringBuffer();
    31:       Field[] fields = obj.getClass().getDeclaredFields();
    32:       for (int i = 0; i < fields.length; i++)
    33:       {
    34:          Field f = fields[i];
    35:          f.setAccessible(true);
    36:          Object value = f.get(obj);
    37:          buffer.append(f.getType().getName());
    38:          buffer.append(" ");
    39:          buffer.append(f.getName());
    40:          buffer.append("=");
    41:          buffer.append("" + value);
    42:          buffer.append("\n");
    43:       }
    44:       return buffer.toString();
    45:    }
    46: }