打印一个类的全部信息,包括域,方法和构造器(代码如下)。
public class PracticeReflect {
//用来分析指定类的所有域的信息
public static void printFields(Class theClass) {
Field[] fields=theClass.getDeclaredFields();
System.out.println(" //以下是类"+theClass.getSimpleName()+"的所有域的信息:");
for(Field field:fields) {
System.out.print(" ");
String modifier=Modifier.toString(field.getModifiers());
if(modifier.length()>0) System.out.print(modifier+" ");
System.out.println(field.getType().getSimpleName()+" "+field.getName()+";");
}
System.out.println();
}
//用来分析指定类的所有构造函数的信息
public static void printConstructors(Class theClass) {
Constructor[] constructors=theClass.getDeclaredConstructors();
System.out.println(" //以下是类"+theClass.getSimpleName()+"的所有构造器的信息:");
for(Constructor constructor:constructors) {
String modifiers=Modifier.toString(constructor.getModifiers());
System.out.print(" ");
if(modifiers.length()>0) System.out.print(modifiers+" ");
System.out.print(constructor.getName()+"(");
Class[] parameters=constructor.getParameterTypes();
for(int i=0;i<parameters.length;i++) {//输出所有参数的类型
if(i==0) System.out.print(parameters[i].getSimpleName());
else System.out.print(","+parameters[i].getSimpleName());
}
System.out.println(");");
}
System.out.println();
}
//用来分析指定类的所有方法的信息
public static void printMethods(Class theClass) {
Method[] methods=theClass.getDeclaredMethods();
System.out.println(" //以下是类"+theClass.getSimpleName()+"的所有方法的信息:");
for(Method method:methods) {
String modifiers=Modifier.toString(method.getModifiers());
System.out.print(" ");
if(modifiers.length()>0) System.out.print(modifiers+" ");
System.out.print(method.getName()+"(");
Class[] parameters=method.getParameterTypes();
for(int i=0;i<parameters.length;i++) {//输出所有参数的类型
if(i==0) System.out.print(parameters[i].getSimpleName());
else System.out.print(","+parameters[i].getSimpleName());
}
System.out.println(");");
}
}
public static void main(String[] args) {
String name=null;
if(args.length>0) {
name=args[0];
}else {
Scanner readName=new Scanner(System.in);
System.out.println("请输入包名和类名:(例如:java.util.Date)");
name=readName.next();
}
try {
Class theClass=Class.forName(name);
Class superClass=theClass.getSuperclass();
String modifier=Modifier.toString(theClass.getModifiers());
if(modifier.length()>0) {
System.out.print(modifier+" ");
}
System.out.print("class "+theClass.getSimpleName());
if(superClass!=null&&(!superClass.getSimpleName().equals("Object"))) {
System.out.print(" extends "+superClass.getSimpleName());
}
System.out.println("{");
printFields(theClass);
printConstructors(theClass);
printMethods(theClass);
System.out.println("}");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}