import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.DateFormatSymbols;
import java.util.*;
import static sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl.ThreadStateMap.Byte1.other;
public class Test{
public static void main(String[] args){
String name;
if(args.length > 0)
name = args[0];
else{
Scanner s = new Scanner(System.in);
name = s.nextLine();
}
try{
Class c1 = Class.forName(name);
Class supercl = c1.getSuperclass();
String modifiers = Modifier.toString(c1.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());
printInterface(c1);
System.out.print("\n{\n");
printConstructors(c1);
System.out.println();
printMethods(c1);
System.out.println();
printFields(c1);
System.out.println("}");
}catch (Exception e){
e.printStackTrace();
}
}
//打印构造器
public static void printConstructors(Class cl){
Constructor[] constructors = cl.getConstructors();
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 + " (");
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(");");
}
}
//打印方法
public static void printMethods(Class cl){
Method[] methods = cl.getDeclaredMethods();
for(Method m : methods){
Class returnType = 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(returnType.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 printFields(Class cl){
Field[] fields = cl.getFields();
for(Field f : fields){
System.out.print(" ");
String name = f.getName();
Class type = f.getType();
String modifier = Modifier.toString(f.getModifiers());
if(modifier.length() > 0)
System.out.print(modifier + " ");
System.out.println(type.getName() + " " + name + ";");
}
}
//打印所实现的接口
public static void printInterface(Class cl){
Class[] interfaces = cl.getInterfaces();
if(interfaces.length > 0) {
System.out.println(" implements ");
for (Class i : interfaces) {
if(interfaces.length > 1){
System.out.print(", ");
}
System.out.print(i.getName());
}
}
}
}