Java 反射教程

Java反射能夠在運行時檢視類、接口、屬性和方法,而無需在編譯時知道類名、方法名等等。它也一樣使用反射支持實例化新的對象、調用方法和get/set屬性值。
Java反射很是強大和有用。例如, Java反射能夠用在映射JSON文件的屬性到Java 對象的get/set方法,如Jackson、Gosn、Boon等庫的實現。另外,反射能夠用在映射JDBC結果集的列名到Java對象的get/set方法。
本教程將深刻介紹Java反射。它將解釋Java反射的基礎知識,包括如何使用數組、註解、範型和動態代理,以及動態類的加載和從新加載。
它還將向您展現如何執行更具體的Java反射任務,例如讀取類的全部getter方法,或訪問類的私有字段和方法。
本教程還將清除一些關於範型信息在運行時可用性的認知混淆。一些人聲稱全部範型信息在運行時丟失,這是不正確的。
本教程描述基於Java8。html

Java反射示例

這是一個快速的Java反射示例,向你展現使用反射的代碼格式:java

Method[] methods = MyObject.class.getMethods();

for(Method method : methods){
    System.out.println("method = " + method.getName());
}
Method [] methods=String.class.getMethods();
for (Method method:methods) {
    logger.debug("String 類方法名稱:{},參數個數:{}",method.getName(),method.getParameterCount());
}

本示例從一個名爲MyObject的類中獲取一個Class對象。使用這個class對象展現得到它的方法列表,循環並輸出方法名稱。數組

Java 類對象

使用Java反射時,起點一般是須要使用反射檢視的類的Class對象。例如,得到名爲MyObject類的Class對象能夠這麼寫:debug

Class myObjectClass = MyObject.class;

如今,你能夠引用類MyObjectClass對象。
Java Reflection Class tutorial中有Class對象更詳細的描述。代理

方法和屬性

一旦你擁有表示某些類的Class對象的引用,你能夠訪問這些類的方法和屬性。下面是訪問一個Java類方法和屬性的示例:code

Class myObjectClass = MyObject.class;
Method[] methods = myObjectClass.getMethods();
Field[] fields   = myObjectClass.getFields();

一旦擁有一個java類的方法和屬性的引用,就能夠開始檢視它們。你能夠得到方法和屬性的名稱,採用的參數等等。你甚至能夠經過這些方法和屬性引用調用方法和使用get/set屬性值。
Java Reflection Fields tutorialJava Reflection Methods tutorial教程中有關於訪問方法和屬性的更詳盡的描述。htm

相關文章
相關標籤/搜索