java获取类的信息
關鍵技術剖析
1.java.lang.reflect包實現了java的反射機制,在使用反射機制時,需要導入該包。
2.Class類的forName方法能夠根據類名加載類,獲得類的Class對象。
Class類的getSuperclass方法獲得父類的Class對象;getDeclaredFields方法獲取類聲明的屬性,返回的是一組java.lang.Field對象;getDeclaredConstructors方法獲得類的構造方法,返回的是一組java.lang.reflect.Constructor對象;getMethods方法獲得類的方法,返回的是一組java.lang.reflect.Method的對象。
3.java.olang.reflect.Field描述類聲明的屬性。getModifiers方法獲得屬性的訪問修飾符;getType方法獲得屬性的類型;getName方法獲得屬性名。
4.java.lang.reflect.Constructor描述類的構造方法。getModifiers方法獲得構造方法的訪問修飾符;getName方法獲得方法名,getParameterTypes獲得構造方法的參數類型;getExCeptionTypes方法獲得構造方法聲明的異常。
5.java.lang.reflect.Method描述類聲明的方法。getModifiers方法獲得方法的訪問修飾符;getReturnType方法返回方法的返回類型;getName方法獲得方法名;getParameterTypes方法案獲得方法的參數類型;getExceptionTypes方法獲得聲明的異常。
package com.test;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier;public class Main{/*獲取類的聲明*/private String getClassStatement(Class c){StringBuffer buf = new StringBuffer();if(c.getName().equals("java.lang.Object")){buf.append("public class Object {");return buf.toString();} else {//得到該類的父類名String superName = c.getSuperclass().getName();buf.append("public class ").append(c.getName()).append(" extends ").append(superName).append(" {");return buf.toString();}}/*獲取類的屬性*/private String getFields(Class c){StringBuffer buf = new StringBuffer();Field[] fields = c.getDeclaredFields();for(Field field : fields){//獲取屬性的訪問修飾符//Modifier的一些信息 http://www.it165.net/pro/html/201309/7203.htmlbuf.append(" ").append(Modifier.toString(field.getModifiers())).append(" ");Class<?> type = field.getType();buf.append(type.getName()).append(" ");buf.append(field.getName()).append(";\n");}return buf.toString();}/*獲取類的所有構造方法*/private String getConstructors(Class c){StringBuffer buf = new StringBuffer();//獲取類的構造方法Constructor<?>[] cons = c.getDeclaredConstructors();for(Constructor con : cons){//獲取構造方法的訪問修飾符buf.append(" ").append(Modifier.toString(con.getModifiers())).append(" ");//獲取構造方法的名稱buf.append(con.getName()).append("(");//獲取構造方法的參數Class<?>[] paramType = con.getParameterTypes();for(int i=0; i<paramType.length; ++i){if(i != 0){buf.append(paramType[i].getName());} else {buf.append(", ").append(paramType[i].getName());}}buf.append(")");//獲取方法聲明的異常Class<?>[] excepTypes = con.getExceptionTypes();for(int i=0; i<excepTypes.length; ++i){if(i==0){buf.append(" throws ").append(excepTypes[i].getName());} else {buf.append(", ").append(excepTypes[i].getName());}}buf.append(";\n");}return buf.toString();}private String getMethods(Class c){StringBuffer buf = new StringBuffer();Method[] methods = c.getDeclaredMethods();for(Method method : methods){//獲取方法的訪問修飾符buf.append(" ").append(Modifier.toString(method.getModifiers())).append(" ");//獲取方法的返回類型Class<?> returnType = method.getReturnType();buf.append(returnType.getName()).append(" ");buf.append(method.getName()).append(" (");//獲取方法的名稱//獲取方法的參數類型Class<?>[] paramTypes = method.getParameterTypes();for(int i=0; i<paramTypes.length; ++i){if(i==0){buf.append(paramTypes[i].getName());} else {buf.append(", ").append(paramTypes[i].getName());}}buf.append(")");//獲取方法聲明的異常Class<?>[] excepTypes = method.getExceptionTypes();for(int i=0; i<excepTypes.length; ++i){if(i==0){buf.append(" throws ").append(excepTypes[i].getName());} else {buf.append(", ").append(excepTypes[i].getName());}}buf.append(";\n");}return buf.toString();}public void getClassMessage(){StringBuffer buf = new StringBuffer();try {Class<?> c = Class.forName("com.test.Main");buf.append("/*類的聲明*/\n");buf.append(getClassStatement(c));buf.append("\n");buf.append(" /*字段*/\n");buf.append(getFields(c));buf.append(" /*構造器*/\n");buf.append(getConstructors(c));buf.append(" /*方法*/\n");buf.append(getMethods(c));buf.append("}\n");System.out.println(buf.toString());} catch (ClassNotFoundException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception{new Main().getClassMessage();} }輸出結果
/*類的聲明*/ public class com.test.Main extends java.lang.Object {/*字段*//*構造器*/public com.test.Main();/*方法*/private java.lang.String getClassStatement (java.lang.Class);public void getClassMessage ();public static void main ([Ljava.lang.String;) throws java.lang.Exception;private java.lang.String getConstructors (java.lang.Class);private java.lang.String getFields (java.lang.Class);private java.lang.String getMethods (java.lang.Class); }?
轉載于:https://www.cnblogs.com/hujunzheng/p/5132943.html
總結
以上是生活随笔為你收集整理的java获取类的信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家用双开门中门防盗门,不是双开门
- 下一篇: 工作中常用到的命令