1. 程式人生 > >Java反射程式碼 得到某類的所有欄位 getFields()與getDeclaredFields()區別 getMethod()和getDeclaredMethod()區別

Java反射程式碼 得到某類的所有欄位 getFields()與getDeclaredFields()區別 getMethod()和getDeclaredMethod()區別

**
* 得到某類的所有欄位
*
*/
public void reflect2(){
      try {
          Class cls = Class.forName("entity.UserBean");//載入UserBean類到記憶體中!獲取一個Class物件
          Field[]fields = cls.getDeclaredFields();//通過class取出當前class的所有欄位
           for (Field field : fields) { //完全等同於上面的for迴圈
                  System.out.println(field.getName()+" "+field.getType());
          }
     } catch (Exception e) {
         // TODO Auto-generated catch block
           e.printStackTrace();
     }

}

getFields()獲得某個類的所有的公共(public)的欄位,包括父類。 

getDeclaredFields()獲得某個類的所有申明的欄位,即包括public、private和proteced,但是不包括父類的申明欄位。 

同樣類似的還有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

Method getDeclaredMethod(String name, Class… parameterTypes)d 
          返回一個 Method 物件,該物件反映此 Class 物件所表示的類或介面的指定已宣告方法。
 
Method[] getDeclaredMethods() 
          返回 Method 物件的一個數組,這些物件反映此 Class 物件表示的類或介面宣告的所有方法,包括公共、保護、預設(包)訪問和私有方法,但不包括繼承的方法。 
Method getMethod(String name, Class… parameterTypes) 
          返回一個 Method 物件,它反映此 Class 物件所表示的類或介面的指定公共成員方法。 
Method[] getMethods() 
          返回一個包含某些 Method 物件的陣列,這些物件反映此 Class 物件所表示的類或介面(包括那些由該類或介面宣告的以及從超類和超介面繼承的那些的類或介面)的公共 member 方法。
 
getDeclaredField(String name) 
          返回一個 Field 物件,該物件反映此 Class 物件所表示的類或介面的指定已宣告欄位。 
Field[] getDeclaredFields() 

          返回 Field 物件的一個數組,這些物件反映此 Class 物件所表示的類或介面所宣告的所有欄位,包括公共、保護、預設(包)訪問和私有欄位,但不包括繼承的欄位。

* getConstructors()與getDeclaredConstructors()區別:getConstructors()只能訪問類中宣告為public的建構函式.getDeclaredConstructors()能訪問類中所有的建構函式,與public,private,protect無關