一、Java反射API簡介:
一、什么是反射:
反射是一種強大的工具,它允許我們在運行時檢查類、方法和字段的信息,甚至允許我們動態的調用特定類的方法或改變字段的值。編程語言中的反射機制通常用于從類、對象或方法中檢索元數據,或者更特別的說,從代碼本身中獲取信息。這就意味著我們可以通過一個程序獲取我們代碼的信息,甚至是修改它。
例如,如果你有一個對象,你可以查詢它的類是什么、有哪些字段、有哪些方法,你甚至可以調用它的某個方法,而這一切都是在運行時進行的,也就是說你在編寫程序的時候并不知道要操作的類是什么。
二、核心類與接口:
在Java的java.lang.reflect包中,提供了設計用來支持Java反射的類和接口,以下是四個主要的類:
Class: 每一數組、枚舉、接口、類,甚至是注解,在被JVM加載時,都會自動構造一個Class對象。我們可以通過它獲取到這個類型的所有信息。
Field: 它代表類的成員變量(成員變量也可以稱作屬性)。通過它我們可以獲取到成員變量的所有信息,也可以操作成員變量的值。
Method: 它代表類的方法。通過它我們可以獲取到方法的所有信息,也可以調用方法。
Constructor: 它代表類的構造器。通過它我們可以獲取該構造器的所有信息,也可以通過它來實例化一個對象。
另外
Modifier
類提供了關于類和成員訪問修飾符的信息。
二、利用反射進行類操作:
一、加載類:
在Java中,加載類最常見的方法就是使用
Class
類的forName()
方法。這個方法接受一個字符串參數,這個字符串參數的值是某個類的全路徑名。例如,以下代碼加載
java.util.Date
類,然后返回表示該類的Class
對象:Class dateClass = Class.forName("java.util.Date");
二、創建實例:
有了類的
Class
對象后,我們就可以使用這個Class
對象創建該類的實例。最常見的做法是調用Class
對象的newInstance()
方法:Object dateObject = dateClass.newInstance();
這行代碼會調用
java.util.Date
類的無參數構造方法來創建一個新的Date
對象。注意:
newInstance()
方法只能調用無參數的構造方法。如果類沒有無參數的構造方法,或者無參數構造方法不可訪問,你就不能用這種方式創建類的對象。三、獲取類信息:
下面是一些獲取類信息的方法:
- 獲取類名:
<getName()
方法可以返回類的全路徑名,getSimpleName()
方法返回類的簡單名字。