《java编程思想——第十四章(类型信息)》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011067966/article/details/80375442

类型信息

运行时类型信息使得你可以在程序运行时发现和使用类型信息。

14.1 为什么需要RTTI

RTTI:在运行时,识别一个对象的类型。
使用RTTI可以确定引用的确切类型。

14.2 Class对象##

Class对象记录着运行时的类型信息。

Class c = Class.forName(“Gum”);可以获得Class引用。
c.getInterfaces()获取接口
c.getSuperclass()获取父类
c.newInstance()获取实例

  1. 类字面量
    类名.class也可以获得Class对象的引用。
    当使用".class"来创建Class对象引用时,不会自动初始化改Class对象。
    初始化被延迟到了对静态方法或非常数静态域首次引用时执行。
  2. 泛型的Class引用
    当将泛型语法作用于Class对象时,newInstance()将返回改对象的确切
    类型。
  3. 新的转型语法
    cast()语法接受参数对象,并将其转型为Class引用的类型。

14.3类型转换前先做检查##

RTTI的形式包括:
1)传统的类型转换,如"(Shape)".
2)代表对象类型的Class对象。
3)instanceof告诉是不是某个特定类型的实例。

14.4 注册工厂##

工厂方法设计模式:将对象的创建工作交给类自己去完成。

14.5 instanceof与Class的等价性##

instanceof保持了类型的概念,它指的是“是这个类或这个类的派生了吗”
Class 没有考虑继承,指的是确实类型,是或者不是。

14.6 反射:运行时的类信息##

如果不知道某个类的确切信息RTTI可以告诉你,但是有个限制:这个类型在编译时期必须已知。

RTTI与反射之间的区别在于:对于RTTI来说,编辑器在编译时打开和检查.class文件;反射机制来说,.class文件在编译时期是不可获取的,所以是咋运行时打开和检查.class文件。

  1. 类方法提取器
    Class的getMethods()方法和getConstructors()分别可以返回类的方法,参数,返回值等信息。

14.7 动态代理##

代理是基本设计模式之一。
Proxy.newProxyInstance(classLoader,interface.class,invocationHandler)可以创建动态代理.

14.8空对象##

14.9 接口与类型信息##

interface关键字的一种重要目标就是允许程序员隔离构件,降低耦合性。通过接口可以实现这一目标,但是通过类型信息,这种耦合性还是可以传播出去。
通过反射可以调用所有方法。

猜你喜欢

转载自blog.csdn.net/u011067966/article/details/80375442
今日推荐