第14章-类型信息

首先,知道一种区别:

  编译时可操作类型信息;

  运行时识别类型信息{1-RTTI;2-反射机制};

RTTI:在运行时,识别对象的类型。

1-运行时类型识别的必要性:

  多态中,向上转型,动态绑定的场景,方法和方法体在运行时才关联起来。

接口类引用=具体对象;

接口类引用.function();运行时识别具体对象类型,方法动态绑定。

从数组中取出数据时,数组将所有事物当成Object类型,会自动转型成对应类型,这是RTTI最基本的使用形式

所有的类型转换,都是在运行时进行正确性检查。

抛出问题:怎样知道泛化引用的确切类型?

使用RTTI可以知道。

2-Class对象

类型信息在运行时如何表示?--->由Class对象来表示--包含类信息的对象。

Class对象作用:1.用来创建类的所有常规对象。

         2.RTTI.

每个类都有一个Class对象,编写并且编译了一个新类,就会产生一个Class对象,保存在.class文件中。

jvm使用-类加载器-生成-Class对象。

所有类的加载,是在其第一次被使用时,动态加载到jvm.

创建第一个对类的静态成员的引用时,就会加载这个类。因此可以知道:构造器也是类的静态方法,即使没有static关键字。因此,使用构造方法也是对类的静态成员的引用。

java程序在运行前并非完全加载完毕,而是“按需加载”。

当把Class对象加载到内存,便可用它来创建类的所有对象。

Class.forName()-----获取Class对象的引用,若没被加载则加载。

必须先获取Class对象的引用,才能在运行时获取类型信息。

获取Class对象的引用3种方法:

(1) Class.forName()----不需要具体对象就可以获取Class对象的引用;

(2) 具体对象.getClass()-----也可以获取Class对象的引用;

(3) 类字面常量:ClassName.class;简单安全高效,注意:不会自动初始化该对象。  也就是说,static final 常量值 不会加载Class对象到内存。

Class对象有一些有用的方法:getName();getSimpleName();getSuperclass();

猜你喜欢

转载自www.cnblogs.com/mjbenkyo/p/9226953.html
今日推荐