通過Java的反射(Reflection)機制,即使在編譯時不知道class name和method name等信息,也可以在運行時獲取class、interface、fields和methods等相關信息,還可以創建新的實例、調用方法以及獲取/設置屬性值。
本文將介紹Java反射機制的基本知識,包括:數組(arrays), 註解(annotations),泛型(generics)和動態代理(dynamic proxy),以及動態類的加載和重載入(dynamic class loading and reloading)。
本文還將介紹一些特別的技巧,包括:獲取一個類的getter方法,訪問一個類的私有屬性及方法。
本文在JDK 6 的基礎上介紹Java Reflection。
Example
首先來看一段Java反射的例子
import java.lang.reflect.Method;
public class HelloJava {
public static void main(String[] args) {
Method[] methods = HelloJava.class.getMethods();
for (Method m : methods)
System.out.println(m.getName());
}
}
結果爲
main
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
本文將分爲以下幾個部分來分別介紹Java的反射機制