类型信息
运行时识别对象和类的信息主要有两种方法
- 传统的RTTI,他假定我们在编译时已经知道了所有的类型
- “反射”机制,允许在运行时发现和使用类的信息
为什么需要RTTI
- 面向对象编程中基本的目的是:让代码只操纵对基类的引用
- 如果某个对象出现在字符串表达式中,toString方法自动被调用
- 最基本的RTTI使用形式:容器将所有事物当做Object持有,取出时自动将结果转型。java中所有类型转换都是在运行时进行正确性检查的
- 多态是面向对象编程的基本目标
class对象
- 它包含了与类有关的信息。Class对象就是用来创建类的所有的“常规”对象的
- 每个类都有一个class对象,当编译一个新类时就产生一个class对象(保存在.class文件中)
- 所有类都是在对其第一次使用时动态加载到JVM中的
- java程序在他开始运行之前并非完全加载,哥哥部分是在必需时才加载的
- 所有class对象都属于Class类。
- Class.forname()是取得对象引用的一种方法,用类名的文本作为参数,返回一个class对象的引用
- 如果已经有一个对象,用getClass()方法来获得class引用,它返回对象的实际类型的class引用
- chuandigeiforName的字符串中,你必须使用权限定名(含有包)
- Class的newInstance()方法是实现“虚拟构造器的一种途径”
类字面常量
- 类字面常量不仅可以应用于普通的类,也可以用于接口,数组一级基本数据类型
- 当使用.class来创建对class对象的引用时不会自动的初始化该Class对象
- Class。forName()方法立刻初始化
- 如果一个值是static final的编译期常量,不需要初始化类就可以读取
- 如果一个static域不是final的,读取之前要先进行链接和初始化
- Class引用总是指向某个Class对象,他可以制造类的实例,并包含咳作用与这些实例的所有方法代码,他还包含该类的静态成员,因此Class引用表示的就是他所指向的对象的确切类型,而该对象便是Class类的一个对象。
- Class