RTTI 运行时类型信息 与 Reflect 反射
2015-02-02 17:43
239 查看
RTTI,Run Time Type Information,运行时类型信息。
要理解RTTI在java中的工作原理,必须知道 类型信息 在 运行时 是如何表示的。每个类都有一个字段“Class class;”,好晕啊,类名和对象名一样。
每当编写并编译了一个新类,就会产生一个Class对象,被保存在同名的.class文件中。JVM的类加载器会去用它。
这是Class类的定义。
Class<?> java.lang.Class.forName(String className)
这个静态方法可以取得Class对象的引用,参数必须为完全限定名。
String java.lang.Class.getSimpleName()
不含包名的类名。
String java.lang.Class.getName()
全限定的类名。
java.lang.reflect.Constructor<T>
代表类型T的构造函数。
Constructor<T> java.lang.Class.getDeclaredConstructor(Class<?>... parameterTypes)
获得构造函数。
Object java.lang.reflect.Constructor.newInstance(Object... initargs)
通过构造函数获得新对象。
java.lang.reflect.Method
表示类或接口的一个方法。
Method java.lang.Class.getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
得到当前类的指定方法。
Object java.lang.reflect.Method.invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
在对象obj上调用这个方法。
void java.lang.reflect.AccessibleObject.setAccessible(boolean flag)
Field与Method类都继承了AccessibleObject。所以可以使用这个方法将访问权限从private改为public,再干想干的事,多棒啊。
java.lang.reflect.Field
表示类或接口的一个字段。
Field[] java.lang.Class.getFields()
返回所有public权限的字段。
Field java.lang.Class.getField(String name)
返回名为name的Field对象,只对public权限的字段有效。
Field[] java.lang.Class.getDeclaredFields()
返回所有声明的字段,即便private权限也有效。
Field java.lang.Class.getDeclaredField(String name)
返回名为name的Field对象,即便private权限也有效。
double java.lang.reflect.Field.getDouble(Object obj)
一批类似方法有getDouble\getInt\getLong等。返回obj对象的这个字段的值。
Object java.lang.reflect.Field.get(Object obj)
对于非基本类型,返回obj对象的这个字段的值。
要理解RTTI在java中的工作原理,必须知道 类型信息 在 运行时 是如何表示的。每个类都有一个字段“Class class;”,好晕啊,类名和对象名一样。
每当编写并编译了一个新类,就会产生一个Class对象,被保存在同名的.class文件中。JVM的类加载器会去用它。
Class
public final class Class<T> implements java.io.Serializable, GenericDeclaration,Type,AnnotatedElement{}这是Class类的定义。
Class<?> java.lang.Class.forName(String className)
这个静态方法可以取得Class对象的引用,参数必须为完全限定名。
String java.lang.Class.getSimpleName()
不含包名的类名。
String java.lang.Class.getName()
全限定的类名。
java.lang.reflect.Constructor<T>
代表类型T的构造函数。
Constructor<T> java.lang.Class.getDeclaredConstructor(Class<?>... parameterTypes)
获得构造函数。
Object java.lang.reflect.Constructor.newInstance(Object... initargs)
通过构造函数获得新对象。
java.lang.reflect.Method
表示类或接口的一个方法。
Method java.lang.Class.getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
得到当前类的指定方法。
Object java.lang.reflect.Method.invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
在对象obj上调用这个方法。
void java.lang.reflect.AccessibleObject.setAccessible(boolean flag)
Field与Method类都继承了AccessibleObject。所以可以使用这个方法将访问权限从private改为public,再干想干的事,多棒啊。
java.lang.reflect.Field
表示类或接口的一个字段。
Field[] java.lang.Class.getFields()
返回所有public权限的字段。
Field java.lang.Class.getField(String name)
返回名为name的Field对象,只对public权限的字段有效。
Field[] java.lang.Class.getDeclaredFields()
返回所有声明的字段,即便private权限也有效。
Field java.lang.Class.getDeclaredField(String name)
返回名为name的Field对象,即便private权限也有效。
double java.lang.reflect.Field.getDouble(Object obj)
一批类似方法有getDouble\getInt\getLong等。返回obj对象的这个字段的值。
Object java.lang.reflect.Field.get(Object obj)
对于非基本类型,返回obj对象的这个字段的值。
对象转换
两个类A与B,字段完全一致,现有 A的对象a,如何快速构造一个B类的b对象?相关文章推荐
- Java的反射与RTTI(运行时类型信息)的区别
- [开发故事]第四回:应用反射在运行时动态获取类型信息
- 了解运行时类型信息(RTTI)
- 【C++】学习笔记草稿版17(运行时类型信息RTTI)
- Java 反射 —— 运行时的类型信息
- Runtime Type Information 运行时类型信息RTTI
- 4.MFCRTTI,运行时类型信息
- C++之运行时类型信息(RTTI)
- 了解运行时类型信息(RTTI)
- 类型信息(RTTI和反射)
- Java RTTI 运行时类型识别 和反射
- C++ - RTTI(RunTime Type Information)运行时类型信息 详解
- java 运行时类型识别(RTTI) - 2 - 反射
- 了解运行时类型信息(RTTI)
- RTTI 运行时类型信息
- 使用Java的RTTI(运行时类型信息)要注意的地方
- RTTI(Run-Time Type Information,通过运行时类型信息) 运行期类型检查
- QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化
- C++知识文档十二_运行时类型信息RTTI