1. 程式人生 > 其它 >Java 反射學習筆記

Java 反射學習筆記

反射,指在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法,對任意一個物件,都能呼叫它的任意一個方法。這種動態獲取資訊,以及動態呼叫物件方法的功能,叫做 Java 語言的反射機制。

反射

指程式可以訪問、檢測和修改它本身狀態或行為的一種能力
Java 通過位元組碼反射出類中的資訊,包含:類、屬性、方法、構造、繼承、實現
在 JDK 中java.lang包與java.lang.reflect包下

一. Class 類

在反射中 Class 代表一個類,也叫類型別,是 Java 資料型別中的一種
建立方式
  1. Class.forName("完整路徑")

  2. 類名.class

  3. 物件名.getClass()

常用方法
  1. getName():獲取類的完整路徑

  2. getSimpleName():獲取類的名稱

  3. newInstance():建立類的新例項,就是新物件

二. Java 中的資料型別(☆)

  1. 基本資料型別(8種)

  2. 引用型別(陣列和物件)

  3. 列舉

  4. 類型別

三. Java 中建立物件方式(☆)

  1. new關鍵字

  2. 反序列化

  3. 反射

  4. 克隆

四. Constructor

在 Java 反射中 Constructor 的一個例項代表一個類的構造方法,可以通過類型別獲取

建立方式
  1. class物件.getConstructors():獲取所有的構造方法,返回一個構造方法陣列

  2. class物件.getConstructor():獲取指定構造方法

常用方法
  1. getName():獲取構造方法的名稱

  2. getParameterTypes()

    :獲取構造方法引數列表

  3. getModefiers():獲取構造方法訪問修飾符

  4. getExceptionTypes():獲取構造方法的異常

  5. newInstance():根據指定的構造方法建立物件

五. Filed

在 Java 反射中 Filed 一個例項代表一個類中的屬性

建立方式
  1. getDeclaredFields():獲取本類中的所有屬性,返回一個屬性陣列

  2. getDeclaredField(String name):根據名稱獲取本類中的單個屬性

  3. getFields():獲取父類、父介面中所有的 public 修飾的屬性

  4. getField(String name)

    :根據名稱獲取父類,父介面中的 public 修飾的屬性

常用方法
  1. getName():獲取屬性名稱

  2. getModifiers():獲取屬性訪問修飾符

  3. getType():獲取屬性資料型別

  4. setAccessible(boolean b):設定私有變數的訪問許可權,預設為 false

  5. set(Object obj, Object value):給屬性賦值

  6. get(Objuct obj):獲取屬性值

  7. getModifiers():獲取該屬性的訪問修飾符的 int 表示

  8. Modifier.toString(1):根據訪問修飾符的 int 值獲取相對應的字串表示

六. Method

在反射中 Method 一個例項代表一個類中的方法

建立方式
  1. Class物件.getDecaredMethods():獲取本類中所有的方法

  2. Class物件.getDeclaredMethod(String name,Class<?> paramType):根據方法名稱與引數列表獲取本類中指定的方法

  3. Class物件.getMethods():獲取本類、父類、父介面中的所有方法

  4. Class物件.getMethod(String name,Class<?> paramType):根據方法名稱與引數列表獲取本類

常用方法
  1. getName():獲取方法名

  2. getParameterTypes():獲取引數列表

  3. getModifiers():訪問修飾符

  4. getReturnType():獲取返回值型別

  5. getExceptionTypes():獲取異常型別

  6. invoke(Object obj, Object paramValue):執行方法(方法的回撥)

七. 註解

註解的定義
  1. @Documented:表示註解文件

  2. public @interface Table{}:表示註解類 定義註解,並不是 interface

  3. @Target(value={ElementType.TYPE}:表示作用範圍,作用範圍由ElementType指定,常用如下:

    • TYPE 表示作用在類上

    • FIELD 表示作用在欄位上

    • METHOD 表示作用在方法上

    • PARAMETER 表示作用在引數列表上

    • CONSTRUCTOR 表示作用在構造方法上

  4. @Retention(RetentionPolicy.RUNTIME):指定註解的生命週期,一共三種,通過 RetentionPolicy 定義,具體如下:

    • SOURCE 表示在原始碼中有效

    • CLASS 表示在位元組碼檔案中有效(.class檔案)

    • RUNTIME 表示在 JVM 執行時有效

注:如果註解裡面只有一個 value 屬性,可以省略不寫,預設就是 value=

註解的獲取
  1. Class物件.getAnnotation(Class annotationClass):獲取類上的註解

  2. Field物件.getAnnotation(Class annotationClass):獲取欄位上的註解

  3. Method物件.getAnnotation(Class annotationClass):獲取方法上的註解

本文來自部落格園,作者:Schieber,轉載請註明原文連結:https://www.cnblogs.com/xiqingbo/p/java-21.html