Java反射指在程序运行的时候,能检查类,接口,域,方法等信息。在编译的时候也能通过反射创建对象,调用对象的方法以及get/set字段。
Java反射是十分强大且有用的。例如像 Butterfly Persistence当在运行时将对象映射到数据库中的表。或者像,当在运行时将脚本语言中的语句映射到实际对象上的方法调用时,
网上已经有众多的反射教程了。但是包括Sun公司在内的大多数反射教程,仅仅只是接触到反射的表层。
这篇教程将会更加的深入讲解反射比起那些我见过的。它将讲解反射的基本原理比如怎样操作数组的,泛型和动态代理,动态的加载类和重新加载。也将告诉你怎样去做一下更特别的任务,像获取一个类的所有方法,甚至是私有的变量。这篇教程理清运行时的可用泛型。有些人生成泛型在运行时已经消失了。这是不对的。
本教程基于Java 1.6。
一个例子
一个使用反射的列子:
1 | Method[] methods = MyObject.class.getMethods(); |
这个例子获取到的MyObject类的对象。打印了MyObject的所有的方法。
本教程的其余部分(在其他文本中)将进一步详细解释所有这些工作原理。
原文