JAVA Reflect

簡述

java.lang.reflect 包中有三個(gè)類Field、Method、Constructor描述類的域、方法和構(gòu)造器。

1.都有g(shù)etName()方法,返回項(xiàng)目名稱。
2.都有g(shù)etModifiers()方法,返回整型數(shù)值,用不同的位開關(guān)描述public、static修飾符狀況使用Modifier類的靜態(tài)方法分析該數(shù)值。例如:isPublic,isPrivate,isFinal是否為public,private,final。Modifier,toString方法答應(yīng)修飾符。

Modifier.toString(*.getModifiers());

3.Class類中的getFields、getMethods和getConstructors方法將分別返回類提供的public域、方法和構(gòu)造數(shù)組,包括超類的公有成員。
Class類的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法將分別返回全部域、方法、和構(gòu)造器,包括私有和受保護(hù)成員,不包括超類成員。

實(shí)例

public class reflect {

    public static void main(String[] args) {
        try{
            String s = "java.util.Date";
            Class c = Class.forName(s);//通過forName方法返回該類名的Class
            String modifiers = Modifier.toString(c.getModifiers());//返回類修飾符使用狀況,public,static。。
            System.out.print(modifiers+" "+"class"+" "+s);
            Class c1 = c.getSuperclass();//獲取超類的Class
            if(c1!=null&&c1!=Object.class){
                System.out.print(" extends"+" "+c1.getName());//通過getName返回類名
            }
            
            System.out.print(" {"+"\n");
            Constructor[] constructors = c.getConstructors();  //獲取該類下的所有構(gòu)造器
            for(Constructor constructor:constructors){
                System.out.print("  ");
                modifiers = Modifier.toString(constructor.getModifiers());//獲取構(gòu)造器的修飾符狀況
                if(modifiers.length()>0)
                    System.out.print(modifiers+" "+constructor.getName()+"(");//獲取構(gòu)造器名稱
                
                Class[] paramTypes = constructor.getParameterTypes();//獲取構(gòu)造器所有參數(shù)的類
                for(int i=0;i<paramTypes.length;i++){
                    if(i>0) System.out.print(",");
                    System.out.print(paramTypes[i].getName());
                }
                System.out.print(");\n");
            }

            System.out.print("\n\n");
            Method[] methods = c.getDeclaredMethods();//獲取類中聲明的所有方法
            for(Method method:methods){
                modifiers = Modifier.toString(method.getModifiers());
                Class retype=method.getReturnType();
                System.out.print("  "+modifiers+" "+retype.getName()+" "+method.getName()+"(");
                Class[] paramTypes= method.getParameterTypes();
                for(int i=0;i<paramTypes.length;i++){
                    if(i>0) System.out.print(",");
                    System.out.print(paramTypes[i].getName());
                }
                System.out.print(");\n");
            }

            System.out.print("\n\n");
            
            Field[] fields = c.getDeclaredFields();
            for(Field field:fields){
                modifiers = Modifier.toString(field.getModifiers());
                Class f1 = field.getType();
                System.out.print("  "+modifiers+" "+f1.getName()+" "+field.getName()+";"+"\n");
            }

            System.out.print("}");
        }catch(Exception exception){

            exception.printStackTrace();
        }
    }

} 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容