importjava.io.File;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.lang.reflect.Modifier;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;public classMain {public static voidmain(String[] args) {
reflect("java.lang.Double");
}/** 反射*/
public static voidreflect(String className){try{//根据类的完整名称获取到类的实例
Class cl =Class.forName(className);
Class supercl= cl.getSuperclass(); //获取父类
String modifiers =Modifier.toString(cl.getModifiers());if(modifiers.length()>0){
System.out.print(modifiers+" ");
}
System.out.print("class " +className);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();
}
}/** 打印某个class的全部的构造函数*/
public static voidprintConstructors(Class cl){//获取当前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){//打印修饰符 public
System.out.print(modifiers + " ");
}//打印构造方法名称
System.out.print(name + "(");//获取构造方法的参数类型
Class[] paramTypes =c.getParameterTypes();for(int j = 0;j0){
System.out.print(", ");
}//打印参数名称
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}/** 打印类的所有方法
* @param cl*/
public static voidprintMethods(Class cl){//获取方法的集合
Method[] methods =cl.getDeclaredMethods();//遍历方法
for(Method m : methods){//获取方法的返回类型
Class retType =m.getReturnType();//获取方法名称
String name =m.getName();
System.out.print(" ");//获取方法修饰符
String modifiers =Modifier.toString(m.getModifiers());if(modifiers.length()>0){//打印方法的修饰符
System.out.print(modifiers+" ");
}//打印返回类型和方法名称
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(");");
}
}/** 打印所有字段
* @param cl*/
public static voidprintFields(Class cl){//获取类的所有全局变量字段
Field[] fields =cl.getDeclaredFields();for(Field f : fields){//获取字段的类型 例如 :int ,String 等
Class type =f.getType();//获取字段名称
String name =f.getName();
System.out.print(" ");//获取字段的修饰符 例如:public 或者private或者public static final等
String modifiers =Modifier.toString(f.getModifiers());if(modifiers.length()>0){//打印字段的修饰符
System.out.print(modifiers +" ");
}//打印字段的数据类型和字段名称
System.out.println(type.getName() + " " + name + ";");
}
}
}