Java RTTI与反射
来源:互联网 发布:linux fat挂载移动硬盘 编辑:程序博客网 时间:2024/06/04 20:51
首先,Java RTTI与反射,搜了很多资料,结论是,这名字本身就很sb,这俩东西很难说清楚区别又不完全一样(好吧,反正只能先这么记了)。
按照大多数程序员比较能接受的概念,运行时类型识别(RTTI, Run-Time Type Identification)指的是Java在运行时能够获得或判断某个对象的类型信息,这东西是C++中的一个概念,由《Think in Java》的作者薅过来的,起因是因为这大神写过一本《Think in C++》反响还不错。反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。反射的精髓在于运行时,三个字,只不过RTTI的关键在于类型识别。
RTTI是一种机制,Java中多态就是由该机制实现的,该机制的实现主要依赖Class类。具体实现是,Java中每个类,都会有一个与之对应的Class类的对象,可以通过 类名称.class或者 普通对象的getClass()方法获取类型对应的Class类对象。
获取某一个类的Class类对象的三种办法:
1.类名称.class
2.对象.getClass()
3.Class class = Class.forName("类名称");
获取到目标类对应的Class类对象class之后,可以使用class.newInstance()生成目标类的实例,并且可以用class的几个对应的方法获知目标类的方法,构造函数,全局变量。
看下面一段代码:
Human aPerson = new Human(); Class c1 = aPerson.getClass(); System.out.println(c1.getName()); Human anotherPerson = new Woman();//Woman类型的对象 向上转型Human Class c2 = anotherPerson.getClass(); System.out.println(c2.getName());在c2中,即使我们将Women对象的引用向上转换为Human对象的引用,对象所指向的Class类对象依然是Woman。
Java中每个对象在生成的时候都有相应的Class类对象引用,可以用getClass()方法访问。因此,我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。由于Class对象的存在,Java不会因为类型的向上转换而迷失。这就是多态的原理。
Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。
Java反射框架主要提供以下功能:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
4.在运行时调用任意一个对象的方法
运行时动态加载类:在编译期间并不知道某一具体类的存在,运行时遇到了,就根据类的名称利用反射机制获取该类的Class类对象,利用类的Class类对象生成目标类的事例。
参考文章:
http://www.cnblogs.com/vamei/archive/2013/04/14/3013985.html
http://www.sczyh30.com/posts/Java/java-reflection-1/
http://www.importnew.com/23560.html
- Java RTTI与反射
- java-----RTTI与反射
- Java RTTI与反射
- Java RTTI与反射
- Java RTTI与反射
- Java中的RTTI与反射
- Java基础:RTTI与反射
- 【Java基础】RTTI与反射之Java
- 【Java基础】RTTI与反射之Java
- java:RTTI与反射的区别
- JAVA的反射机制与RTTI
- RTTI与反射
- RTTI与反射区别
- RTTI与反射
- java RTTI和反射
- 《Java编程思想》之类型检查(RTTI与反射机制)
- Java:RTTI与反射机制的一些概念
- java的RTTI与反射机制的区别和联系
- Spring的Controller中某个方法参数加了@RequestBody之后请求无法进入方法?
- 微服务与SOA之间差了一个ESB
- html基础向_2
- 微服务实战(一):微服务架构的优势与不足
- Hibernate部分知识点
- Java RTTI与反射
- android的imageView出现failed to instantiate one or more classes
- 欢迎使用CSDN-markdown编辑器
- Spring部分知识点
- 微服务实战(二):使用API Gateway
- 领域驱动设计有关内容
- Struts2部分知识点
- A Dangerous Maze (II) LightOJ
- SpringMVC部分知识点