程序清单-打印一个类的全部信息
来源:互联网 发布:mac启动windows 编辑:程序博客网 时间:2024/05/22 00:51
这个程序将提醒用户输入类名,然后输入类中所有方法和构造器的签名,以及全部域名。
如:
请输入类名:java.lang.Doublepublic final class java.lang.Double extends java.lang.Number{ public java.lang.Double(double); public java.lang.Double(java.lang.String); public boolean equals(java.lang.Object); public static java.lang.String toString(double); public java.lang.String toString(); public int hashCode(); public static native long doubleToRawLongBits(double); public static long doubleToLongBits(double); public static native double longBitsToDouble(long); public int compareTo(java.lang.Double); public volatile int compareTo(java.lang.Object); public byte byteValue(); public short shortValue(); public int intValue(); public long longValue(); public float floatValue(); public double doubleValue(); public static java.lang.Double valueOf(double); public static java.lang.Double valueOf(java.lang.String); public static java.lang.String toHexString(double); public static int compare(double, double); public static boolean isNaN(double); public boolean isNaN(); public static boolean isInfinite(double); public boolean isInfinite(); public static double parseDouble(java.lang.String);public static final double POSITIVE_INFINITY; public static final double NEGATIVE_INFINITY; public static final double NaN; public static final double MAX_VALUE; public static final double MIN_NORMAL; public static final double MIN_VALUE; public static final int MAX_EXPONENT; public static final int MIN_EXPONENT; public static final int SIZE; public static final java.lang.Class TYPE; private final double value; private static final long serialVersionUID;}
程序源代码:
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("请输入类名:"); name = in.next(); } try { Class cl = Class.forName(name); Class superCl = cl.getSuperclass(); String modifiers = Modifier.toString(cl.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()); } 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(); } } /** * 输出构造函数 * @param cl */ public static void printConstructors(Class cl){ 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){ 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 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(");"); } } public static void printFields(Class cl){ Field[] fields = cl.getDeclaredFields(); for (Field f:fields){ Class type = f.getType(); String name = f.getName(); System.out.print(" "); String modifiers = Modifier.toString(f.getModifiers()); if (modifiers.length()>0) System.out.print(modifiers+" "); System.out.println(type.getName()+" "+name+";"); } }}
阅读全文