import java.lang.reflect.*; public class ReFlectionTest { /** * @param args * 利用反射機制解析 java.lang.String */ public static void main(String[] args) { // TODO Auto-generated method stub Class c = null; try { // c=Class.forName(args[0]);//运行的时候可以输入java.lang.String等类名 c = Class.forName("java.lang.String");//解剖String类 //得到这个类所在的包名 System.out.println("package " + c.getPackage().getName() + ";"); //得到类的修饰符.c.getModifiers()会得到修饰符所对应的整型值 //调用Modifier.toString()方法将其转化为修饰符 System.out.print(Modifier.toString(c.getModifiers()) + " "); //得到类名 System.out.print("class " + c.getSimpleName()); //得到父类的名字不加getSimpleName()会输出class java.lang.Object //加上只输出Object System.out.print(" extends " + c.getSuperclass().getSimpleName()); //因为一个类实现的接口可能有几个,所以会得到一个数组 Class[] inter = c.getInterfaces(); if (inter.length != 0) {//有这个判断语句是因为如果一个类没有实现接口的话,就不需要输出 //implements这个关键字 System.out.print(" implements "); for (int i = 0; i < inter.length; i++) { System.out.print(inter[i].getSimpleName()); if (i < inter.length - 1) {//除了最后一个接口,其余的后面都跟一个逗号 System.out.print(","); } } } System.out.println("{"); printFields(c);//输出属性的调用 System.out.println("}"); printMethods(c);//输出方法的调用 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void printFields(Class c) {//输出属性 //得到属性数组 Field[] field = c.getDeclaredFields(); for (int i = 0; i < field.length; i++) { System.out.print("/t"//设置缩进 + Modifier.toString(field[i].getModifiers()) + " ");//得到属性修设符 System.out.print(" " + field[i].getType().getSimpleName() + " ");//得到属性类型 System.out.print(" " + field[i].getName() + ";");//得到属性名字 System.out.println();//换行 } } public static void printMethods(Class c) {//输出方法 Method[] method = c.getDeclaredMethods(); for (int i = 0; i < method.length; i++) { System.out.print("/t" + Modifier.toString(method[i].getModifiers()) + " ");//输出方法修设符 System.out.print(method[i].getReturnType().getSimpleName() + " ");//输出方法返回类型 System.out.print(method[i].getName() + " ");//输出方法名 System.out.print("("); //得到形参数组 Class[] parType = method[i].getParameterTypes(); for (int j = 0; j < parType.length; j++) { System.out.print(method[i].getParameterTypes()[j]//输出形参名 .getSimpleName() + " arg" + j);//在每个形参类型后加个形参名 if (j < parType.length - 1) { System.out.print(",");//除了最后一个形参,每个形参后输出一个逗号 } } System.out.print(")"); //得到抛出异常输出 Class[] excep = method[i].getExceptionTypes(); if (excep.length > 0) { System.out.print("throws "); for (int k = 0; k < excep.length; k++) { System.out.print(excep[k].getName() + " ");//输出异常 if (k < excep.length - 1) { System.out.print(",");//有多个异常用逗号隔开 } } } System.out.print("{"); System.out.print("...."); System.out.println("}"); } } }