反射概念:
Java反射(Reflection)是一種新的操作類中成員變量、構造方法和普通方法的機制,爲了實現對成員變量、構造方法和普通方法的操作,我們需要藉助Java自身提供的java.lang包下(不需要引包)的Class類和java.lang.reflect包下的反射API 。
Class類(是 Java 反射的核心類,可以獲取類的屬性方法等內容)
Class類是Java 反射機制的入口,封裝了一個類或接口的運行時信息,通過調用Class類的方法可以獲取這些信息。
Class類的特點: 該類在java.lang包中(不需要引包);
該類被final所修飾,即該類不可以被子類繼承;
該類實現了Serializable接口;
該類的構造方法被private所修飾,即不能通過new關鍵字創建該類的對象;
可以通過如下六種方法獲取到Class類實例化對象:
通過Class類靜態forName(“類包名.類名”)獲取Class類實例,建議使用這種形式:
如果泛型不確定可以使用?號代替
通過使用類名.class獲取Class類實例:
如果是基本數據類型,則可以通過包裝類.TYPE獲取Class類實例,當然,也可以通過基本數據類型.class獲取Class類實例。
package vinus;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz=Integer.TYPE;
System.out.println(clazz.getName());
}
}
如果已創建了引用類型的對象,則可以通過調用對象中的 getClass( )方法獲取Class類實例。
通過元素類型[].class可以獲取數組所對應的Class類實例:
獲取元素爲String類型的數組所對應的Class類對象舉例:
通過調用某個類的Class實例的getSuperClass()方法可以獲取該類超類的Class實例: