反射的一些東東

反射

1.  利用 forName() 方法進行 Class 類對象取得, 其最大的特徵是可以在類不存在的時候保持程序編譯的正確性
     例:
       Class<?> cls = Class.forName("com.zhc.main.Person");


2.  利用 newInstance() 方法可以實例化對象
     例:
       Object obj = cls.newInstance();


3.  使用反射時,類裏面必須有一個無參的構造方法.(JAVA 類必須要提供有無參構造)

4.  getName(),會取得完整的類名稱(包.類)
    getSimplename(),只取得類名稱(沒有包名稱)

5. Method[] getMethods() 取得全部方法

   Method getMethod(String name,Class<?>... parameterTypes) // 獲取公共的方法
   以上的兩個方法裏面返回的都是 java.lang.reflect.Method
   
   Method getDeclaredMethod("xxx"); // 獲取任意的方法(xxx:方法名)

   Method 類裏面最重要的方法是:
   invoke(Object obj,Object... args)  調用指定的方法並且 Method 對象的 invoke 是有返回值的,
   它的返回值就是目標方法執行的返回值

   若是私有的方法,必須使用 setAccessible(true) 讓該方法可以訪問  


   任何方法調用時都必須有實例化對象,而後再設置參數;
 
   在整個 Method 類裏面最爲重要的操作方法只有一個: invoke(), 這個是可以直接反射調用方法.
 
   反射調用
    一個類必須在有一個實例化對象的情況下才能夠調用類中的普通方法

   例:
        Class<?> cls = Class.forName("com.zhc.main.Person");
        Object obj = cls.newInstance(); // 實例化對象
        Method metA = cls.getMethod("setName", String.class); // setName()
        Method metB = cls.getMethod("getName"); // getName()
        metA.invoke(obj, "奔馳狗"); // setter 方法沒有返回值
        System.out.println(metB.invoke(obj));













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