java提供在运行时识别对象的类和信息,有两种方式:1.RTTI(Run-Time Type Identification)。2.反射机制。
1.先来介绍一下RTTI:(我不知道为什么介绍反射的文章会出现RTTI).
在运行是,RTTI为何类的相关信息,其中多态就是基于RTTI实现的。即便子类对象向上转型为父类引用,其在运行时仍会被识别为其“真正”的类。
我的理解就是在对象的内存空间中一定有一块区域标记了他的class类型。
2.反射,不过就是用一个Class类去代表所有的类,通过这个Class类可以获得类的属性,方法,构造器等,总之一切和类相关的东西都可以获得。
通过这些获得的东西,在java.lang.reflect中定义了,其中包括Field,Method,Constract等,可以再对一个实体进行操作。
额。。。。对我来说java中用到反射的地方就是spring中的代理。
3.代理模式的实现:
目标对象有实现的接口,有jdk自带的proxy类进行代理。
目标对象没有实现接口,用cglib进行代理。