淺析Java反射機制,淺析java反射
一、什麼是反射
動態擷取類的資訊以及動態調用對象的方法稱為Java的反射(Reflection)機制。反射提供了封裝程式集、模組和類型的對象。在Java運行時環境中,對於任意一個類的對象,可以通過反射擷取這個類的資訊。
二、反射的作用
Java反射機制允許程式在運行時透過Reflection APIs取得任意一個已知名稱的class的內部資訊,包括modifiers(如public、static等)、superclass(如Object)、實現的interfaces(如Serializable)、fields(屬性)和methods(方法)(但不包括methods定義),可於運行時改變fields的內容,也可調用methods.
三、Java Reflection API簡介
在JDK中,主要由以下類實現Java反射機制:
①Class類:代表一個類;
②Field類:代表類的成員變數(屬性);
③Method類:代表類的方法;
④Constructor類:代表類的構造方法;
⑤Array類:提供了動態建立數組,以及訪問數組元素的靜態方法;
以上類中,Class類在java.lang包,其餘位於java.lang.reflect包。
java.lang.Object類(所有類的超類)定義了getClass()方法,任意一個Java對象都可以通過此方法獲得它的class。
Class類是Reflection API中的核心類,主要有以下方法:
①getName():擷取類的名字;
②getFields():擷取類中public類型的屬性;
③getDeclaredFields():擷取類的所有屬性(包括public、protected、default、private);
④getMethods():擷取類中public類型的方法;
⑤getDeclaredMethods():擷取類的所有方法;
⑥getMethod(String name,Class[] parameterTypes):擷取類的指定方法,name:指定方法的名字,parameterType:指定方法的參數類型;
⑦getConstrutors():擷取類中public類型的構造方法;
⑧getConstrutor(Class[] parameterTypes):擷取類的指定構造方法,parameterTypes:指定構造方法的參數類型;
⑨newInstance():通過類預設的不帶參數的構造方法建立該類的一個對象;
註:在訪問私人屬性和私人方法時,需要對訪問的私人屬性或方法設定setAccessible(true)使被反射的類抑制java的訪問檢查機制。否則會報IllegalAccessException異常。