首页 > 代码库 > 利用Java中反射来分析类的示例小程序

利用Java中反射来分析类的示例小程序

import java.util.*;import java.lang.reflect.*;/** * This program uses reflection to print all features of a class. * @version 1.1 2004-02-21 * @author Cay Horstmann */public class ReflectionTest{   public static void main(String[] args)   {      // read class name from command line args or user input      String name;      if (args.length > 0) name = args[0];      else      {         Scanner in = new Scanner(System.in);         System.out.println("Enter class name (e.g. java.util.Date): ");         name = in.next();      }      try      {         // print class name and superclass name (if != Object)         Class cl = Class.forName(name);//由字符串得到Class类的对象         Class supercl = cl.getSuperclass();         //cl.getModifiers()返回一个整形数值,用不同的位开关描述类似public等修饰符的使用情况         //Modifier.toString方法,将返回一个描述位开关的字符串。将整形数值转换为对应的修饰符的字符串         String modifiers = Modifier.toString(cl.getModifiers());         if (modifiers.length() > 0) System.out.print(modifiers + " ");         System.out.print("class " + name);         if (supercl != null && supercl != Object.class) System.out.print(" extends "               + supercl.getName());         System.out.print("\n{\n");         printConstructors(cl);         System.out.println();         printMethods(cl);         System.out.println();         printFields(cl);         System.out.println("}");      }      catch (ClassNotFoundException e)      {         e.printStackTrace();      }      System.exit(0);   }   /**    * Prints all constructors of a class    * @param cl a class    */   public static void printConstructors(Class cl)   {       //通过Class类的对象,得到一个包含Constructor对象的数组,这个对象数组中,包含了Class所描述       //类的所有构造器的信息       Constructor[] constructors = cl.getDeclaredConstructors();       //提取构造器的信息      for (Constructor c : constructors)      {         String name = c.getName();         System.out.print("   ");         String modifiers = Modifier.toString(c.getModifiers());         if (modifiers.length() > 0) System.out.print(modifiers + " ");                  System.out.print(name + "(");         // print parameter types         //返回一个用于描述参数类型的Class对象数组         Class[] paramTypes = c.getParameterTypes();         for (int j = 0; j < paramTypes.length; j++)         {            if (j > 0) System.out.print(", ");            System.out.print(paramTypes[j].getName());         }         System.out.println(");");      }   }   /**    * Prints all methods of a class    * @param cl a class    */   public static void printMethods(Class cl)   {      //返回包含Method对象的数组,返回这个类或者接口的全部方法,但是不包含由超类继承了的方法      Method[] methods = cl.getDeclaredMethods();      for (Method m : methods)      {         //返回一个用于描述返回类型的的Class对象         Class retType = m.getReturnType();         String name = m.getName();         System.out.print("   ");         // print modifiers, return type and method name         String modifiers = Modifier.toString(m.getModifiers());         if (modifiers.length() > 0) System.out.print(modifiers + " ");                  System.out.print(retType.getName() + " " + name + "(");         // print parameter types         //返回一个用于描述参数类型的Class对象数组         Class[] paramTypes = m.getParameterTypes();         for (int j = 0; j < paramTypes.length; j++)         {            if (j > 0) System.out.print(", ");            System.out.print(paramTypes[j].getName());         }         System.out.println(");");      }   }   /**    * Prints all fields of a class    * @param cl a class    */   public static void printFields(Class cl)   {      //返回一个包含Field对象的数组,这些对象记录了这个类的所有域       Field[] fields = cl.getDeclaredFields();      for (Field f : fields)      {         Class type = f.getType();         String name = f.getName();         System.out.print("   ");         String modifiers = Modifier.toString(f.getModifiers());         if (modifiers.length() > 0) System.out.print(modifiers + " ");                  System.out.println(type.getName() + " " + name + ";");      }   }}

 

利用Java中反射来分析类的示例小程序