java 反射機制入門

 Java反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法,當然包括私有屬性和私有方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲Java語言的反射機制。

在瞭解反射之前,我們需要對java中的Class有一個大致的瞭解:

  • Class也是一個類,用來描述類本省的類。包括類的屬性field,方法method,接口和構造器constructor等屬性
  • 也就是說通過一個類的對象,其實可以獲得這個類的所有信息
  • 一個JVM中一個類只有一個Class實例,且該實例只由系統來創建

下面通過反射機制Class類中的一些方法和相關方法來詳細瞭解反射:

1.反射機制獲取類clazz的方法:

  • className.class
  • object.getClass()
  • Class.forName("類的全稱")

2.通過類clazz來獲得對象:

  • Object object=clazz.newInstance();//該類必須包含默認構造函數

3.類的加載器:clazz.getClassLoader()


4.獲取類的method:

  • 獲取類的公有方法:Method [] methods=clazz.getMethods();
  • 獲取所有方法:clazz.getDeclaredMethods();
  • 獲取指定方法:使用參數的類型做爲參數,getDeclaredMethod(String name, Class<?>... parameterTypes); 
5.invoke方法:

method.invoke(Object obj, Object... args)

6.field字段:

  • 獲取所有字段:Field [] fields=clazz.getDeclaredFields();
  • 獲取指定名字的field:  clazz.getDeclaredField("fieldName");
  • 獲取field的名字:field.getName();
  • 獲取指定對象Field的值:field.get(obj);
  • 設置指定對象Field的值:field.set(obj, val);

7.構造器:

  • 獲取指定類的構造器:Constructor<類> [] cons=clazz.getConstructors();
  • 獲取指定構造器:clazz.getConstructos(Class<?>...parameterTypes);
  • 使用構造器: constructor.newInstance(Object...object)

8.註解

   •Annotation其實就是代碼裏的特殊標記,這些標記可以在編譯,類加載運行時被讀取,並執行相應的處理.通過使用Annotation,程序員可以在不改變原有邏輯的情況下,在源文件中嵌入一些補充信息.
   •Annotation 可以像修飾符一樣被使用,可用於修飾包,,構造器方法,成員變量參數,局部變量的聲明,這些信息被保存在Annotation的 “name=value”對中.
  •Annotation能被用來爲程序元素(,方法,成員變量等)設置元數據。

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