十四章-类型信息

2017-08-15  本文已影响26人  木书

一、在java中识别运行时对象和类的信息的两种方式:

1.RTTI,它假定我们自编译时已经知道了所有的类型;

2.反射机制,它允许我们在运行时发现和使用类的信息。

二、Class对象

1.Class对象就是用来创建类的所有的“常规”对象的。

2.为了生成Class对象,虚拟机将使用被称为“类加载器”的子系统。

3.生成Class对象的引用的两种方式:

#Class.forName();

#使用类字面常量:XX.class(基本数据类型的包装器类还可以使用XX.TYPE,编程思想建议都使用XX.class,以保持一致性)

二者区别:使用.class来创建对Class对象的引用时,不会自动地初始化该Class对象,初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行。

4.为了在使用泛化的Class引用时放松限制,可以使用通配符。

通配符就是"?",表示任何事物。

再此之上加点限制就是,Class表示T的父类,Class表示T的子类。

三、RTTI形式

#传统的类型转换(Shape),可能会抛出异常。

#Class对象

#关键字instanceof

如下,进行向下转型前,如果不知道这个对象什么类型,使用instanceof很重要,否则可能会得到一个ClassCastException异常。

Class.isInstance()方法使我们不在需要instanceof表达式

isAssignableFrom:判定此Class对象所表示的类或接口与指定的Class参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回true,否则返回false。如果该Class表示一个基本类型,且指定的Class参数正是该Class对象,则该方法返回true,否则返回false。

四、关于反射

Class的getMethod()和getConstructors()方法分别返回Method对象的数组和Constructor对象的数组。

五、动态代理

Java的动态代理实际上就是在一般的代理模式上实现了InvocationHandler接口

上一篇下一篇

猜你喜欢

热点阅读