又是一个之前没有好好学的点,落下的东西实在太多了,希望来得及。
书中写到,反射机制可以用来:1、在运行时分析类的能力。2、在运行时查看对象。3、实现通用的数组操作代码。4、利用Method对象,这个对象很像C++中的函数指针。
Class类
程序运行期间,系统始终为所有对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应方法执行。
Object类中的getClass()方法就可返回这样一个保存这些信息的Class类的实例。一个Class对象表示一个特定类的属性。最常用的Class方法是getName方法,这个方法会返回该类的名字,如果类在一个包里,那么包名也会是类名的一部分。
还可以通过Class的forName静态方法,获得类名对应的Class对象,即Class.forName(className)。若className不是类名或接口名,则该方法将会抛出一个异常。因此,使用该方法时,需要提供异常处理方法。
getClass().newInstance()也是一个获取类实例的方法。
利用反射分析类的能力
java.lang.reflect包里有Field、Method、Constructor三个类,分别描述类的域、方法和构造器。三个类都有getName方法,用于返回类的名称。
Field类可以通过getType方法,用来返回描述域所属类型的Class对象。Method,Constructor类都有能报告参数的方法。Method的方法更加丰富,还能报告方法的返回值、方法的访问关键字。
Class类中的getFields、getMethods、getConstructors方法也可以返回类提供的public域、方法和构造器数组。getDeclareFields、getDeclareMethods、getDeclareConstructors方法可返回类中声明的所有域、方法和构造器。