反射機制的基本用法

一、反射機制的最大特點:

  • 可以在不導入(import)包到代碼裏的前提下使用依賴類。

二、反射機制的功能:

  • 已知一個實例對象
    • 獲得該實例對象的本類及父類的指定或全部信息
      • 類:類名、父類名、包名等。
      • 方法:方法名、方法修飾符列表、返回值類型、參數列表
      • 成員屬性:屬性類型、屬性名稱

三、實例:

String className = "com.leon.java.reflect.Person";

    ---->1.得到該字符串所指代類的Class對象
        Class<?> cls = Class.forName(className); 

        ---->2.通過該類的Class對象,得到父類Class對象
            Class<?> superclass = cls.getSuperclass();    
        
        ---->3.通過該類的Class對象,得到父接口Class對象
            Class<?>[] clazz = cls.getInterfaces();   

        ---->4.通過該類的Class對象,得到該類的構造方法,並實例化對象
            Object obj = cls.getConstructor().newInstance();

        ---->5.通過該類的Class對象,得到該類的普通方法
            String setMethodName = "setName";
            Method method = cls.getDeclaredMethod(setMethodName, String.class);
            
            ---->6.通過該類的實例化對象,使用該方法        
                method.invoke(obj,value);// 等價於:Person對象.setName(value);
                String getMethodName = "getName";
                Method getMethod = cls.getDeclaredMethod(getMethodName);//getter沒有輸出
                System.out.println(getMethod.invoke(obj));
            
            ---->7.通過該類的實例化對象,獲取並修改該類的屬性
                Field name = cls.getDeclaredField("name");
                name.setAccessible(true);//解除封裝,否則會訪問不了,報錯:java.lang.IllegalAccessException
                name.set(obj,"小屁孩");

四、類關係圖:五、實例關係圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章