RTTI#
这个类型在编译时必须已知,这样才能用RTTI识别它,并利用这些信息做一些有用的事。
Class.forName("ClassName")获取一个类的类型对象
Class.newInstance()创建一个对象
ClassName.class同forName方法
x instanceof Class
Class.isInstanceof(x)同上
反射#
在程序运行时动态的获取一个类信息。
Class类与java.lang.reflect类库一起对反射的槪念进行了支持,该类库包含了Field、 Method以及Constructor类(每个类都实现了Member接口)。这些类型的对象是由JVM在运行 时创建的,用以表示未知类里对应的成员。这样你就可以使用Constructor创建新的对象,用 get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用与Method对象关联的 方法。另外,还可以调用getFields()、getMethods()和getConstructors()等很便利的方法,以返 回表示字段、方法以及构造器的对象的数组(在JDK文档中,通过査找Class类可了解更多相关资料)。这样,匿名对象的类信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。
Method.setAccessible(true)
//将任何方法设置为可访问,包括私有方法
Method.invoke(class)
//调用方法执行
网友评论