| import java.lang.reflect.*; import javax.swing.*;
public class ReflectTest { public static void main(String[] args) { String name; if (args.length > 0) name = args[0]; else name = JOptionPane.showInputDialog("输入一个类名:按(java.lang.Double)格式"); try { Class cl = Class.forName(name); Class supercl = cl.getSuperclass(); //获得超类的Class对象 System.out.println("class "+ name); //判断超类是否为空或为Object if (supercl != null && supercl != Object.class) System.out.println("extends "+ supercl.getName()); System.out.print("\n{\n"); printConstructors(cl); System.out.println(); printMethods(cl); System.out.println(); printField(cl); System.out.println("}"); } //当使用class对象时注意捕获该异常,异常为类型未创建 catch(ClassNotFoundException e) { e.printStackTrace(); System.out.println("类型未创建"); } System.exit(0); } /** *该方法打印构造器的详细信息 */ public static void printConstructors(Class cl) { //定义构造器数组 Constructor[] constructors = cl.getDeclaredConstructors(); for (int i = 0; i < constructors.length; i++) { //将数组元素赋给一个构造器对象 Constructor constr = constructors[i]; String name = constr.getName(); //获取构造器名称 //打印访问修饰符 System.out.print(Modifier.toString(constr.getModifiers())); System.out.print(" "+ name + "("); /** *定义一个参数类型数组该数组是Class对象 *getParameterTypes()返回该构造器参数类型的数组 *打印参数类型名称 */ Class[] paramTypes = constr.getParameterTypes(); for (int j = 0; j < paramTypes.length; j++) { if (j > 0) System.out.print(", "); System.out.print(paramTypes[j].getName()); } System.out.println(");"); } } /** *该方法打印方法的详细信息 */ public static void printMethods(Class cl) { Method[] methods = cl.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { Method m = methods[i]; Class retType = m.getReturnType(); String name = m.getName(); System.out.print(Modifier.toString(m.getModifiers())); System.out.print(" "+ retType.getName() +" "+ name + "("); 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(");"); } } /** *该方法打印字段的详细信息 */ public static void printField(Class cl) { Field[] fields = cl.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field f =fields[i]; Class type = f.getType(); String name = f.getName(); System.out.print(Modifier.toString(f.getModifiers())); System.out.println(" "+ type.getName() +" "+ name + ";"); } } } |