1  import java.lang.reflect.*;
  2  import java.util.*;
  3  
  4  /**
  5     This program shows how to use reflection to print
  6     the names and values of all nonstatic fields of an object.
  7  */
  8  public class FieldTester
  9  {
 10     public static void main(String[] args)
 11           throws IllegalAccessException
 12     {
 13        Random r = new Random();
 14        System.out.print(spyFields(r));
 15        r.nextInt();
 16        System.out.println("\nAfter calling nextInt:\n");      
 17        System.out.print(spyFields(r));
 18     }
 19  
 20     /**
 21        Spies on the field names and values of an object.
 22        @param obj the object whose fields to format
 23        @return a string containing the names and values of
 24        all fields of obj
 25     */
 26     public static String spyFields(Object obj)
 27           throws IllegalAccessException
 28     {
 29        StringBuffer buffer = new StringBuffer();
 30        Field[] fields = obj.getClass().getDeclaredFields();
 31        for (Field f : fields)
 32        {
 33           if (!Modifier.isStatic(f.getModifiers()))
 34           {
 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        }
 45        return buffer.toString();
 46     }
 47  }