/**
*<<Core JAVA>>
*/
package cn.com.per.javase; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Scanner; public class ReflectionTest { public static void main(String[] args) { String name; if(args.length > 0) { name = args[0]; } else { Scanner in = new Scanner(System.in); System.out.println("Enter class name (e.g. java.util.Date): "); name = in.next(); } try { Class cl = Class.forName(name); Class superCl = cl.getSuperclass(); System.out.println("class " + name); if(superCl != null && superCl != Object.class) { System.out.println(" extends " + superCl.getName()); } System.out.println("/n{/n"); printConstructors(cl); System.out.println(); printMethods(cl); System.out.println(); printFields(cl); System.out.println("}"); }catch(ClassNotFoundException e) { e.printStackTrace(); } System.exit(0); } private static void printConstructors(Class cl) { Constructor[] constructors = cl.getConstructors(); for(Constructor c: constructors) { String name = c.getName(); System.out.print(" " + Modifier.toString(c.getModifiers())); 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() + " arg" + j); } System.out.print(");"); System.out.println(); } } private static void printMethods(Class cl) { Method[] methods = cl.getDeclaredMethods(); for(Method m: methods) { 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() + " arg" + j); } System.out.print(");"); System.out.println(); } } private static void printFields(Class cl) { Field[] fields = cl.getDeclaredFields(); for(Field f: fields) { Class type = f.getType(); String name = f.getName(); System.out.print(" " + Modifier.toString(f.getModifiers())); System.out.print(" " + type.getName() + " " + name + ";"); System.out.println(); } } }