通过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的反射机制