RTTI( Run-Time Type Information)的主要做用就是运行期鉴定对象的类型,好比须要塑形的时候,使用instanceof判断类型的时候。Java用Class对象实现本身的RTTI功能,在class对象上能获得未知对象的类型信息。有三种方式能获得Class对象 java
反射要解决的的问题是:1.对于不在本身程序空间内的对象该怎么处理,2.经过网络建立与执行位于远程系统上的对象 ,即"远程方法调用",好比进行分布式计算。 web
针对Field,Method以及Constructor类(每一个都实现了Memberinterface——成员接口),它们都新增了一个库:java.lang.reflect。这些类型的对象都是JVM在运行期建立的,用于表明未知类里对应的成员。在class对象上咱们可调用方法getFields(),getMethods(),getConstructors(),分别返回用于表示字段、方法以及构建器的对象数组(在联机文档中,还可找到与Class类有关的更多的资料),这样即可用构建器建立新对象,用get()和set()方法读取和修改与Field对象关联的字段,以及用invoke()方法调用与Method对象关联的方法。而且,经过利用Class对象的newInstance()方法能够达到 :“尽管我不知道你的准确类型是什么,但请你不管如何都正确地建立本身。”这样,经过反射java就实现了能对未知对象进行处理的功效。 数组
固然,经过反射还能获得一个类的结构信息,好比经过getSuperclass()就能获得父类Class对象,经过getInterfaces()能获得实现的接口。 网络
参考:java思想四版 第11章 分布式