再读thinking in java -- 第十四章 类型信息

RTTI表示运行时识别一个 对象的类别。从容器中去除,元素会自动从Object转换到容器参数类型(运行时转变)。对于具体的类型可以用多态来实现。

Class对象(包含了与类有关的信息)表示了类型信息在运行时的内容。

每编写并编译一个心累就会产生一个Class对象(被保存到.class文件中)。

生成Class对象需要JVM调用称为类加载器的子系统(包含一条类加载链)。所有的类都在第一次使用时,动态加载到jvm

Class中forname()是一个static成员,输入类名,返回Class对象的引用。Class用.newInstance()产生对象。该方法实现了虚拟构造器。

用newInstance方法创建的类必须带有默认构造器。

还有一个生成Class对象的引用即使用类字面常量(类名.class),在编译期会受到检查。

对于基本数据类型的包装器类,则用.TYPE来表示类字面常量

使用.class来创建Class对象的引用时,不会自动初始化该对象,这与forname方法不同

使用类的三个步骤:

1、加载。由类加载器执行;    2、链接。为静态域分配存储空间;    3、初始化

P319程序介绍.class,forname以及正常static的初始化顺序。其中.class初始化滞后,先进行调用,再初始化

在<>中的参数类型使用?即放宽要求,勇勇指向的范围变宽。一般在RTTI和反射得到的类对象都声明为Class<?>

想Class引用添加泛型的原因是为了提高编译期类型检查

在泛型语法中,若手头的是超类,那编译器将只允许你声明超类引用时“某个类,是一个类的超类”,而不是具体的类

RTTI有3种:    1、传统的类型转换;    2、代表对象的类型的Class对象;    3、instanceof(是否是某类的实例)

instanceof方法只与命名类型比较,不能与类对象比较。

isInstance方法提供动态测试对象的途径。getClass方法产生Class对象

反射提供一种机制,用来检查可用的方法,并返回方法。

反射是在运行状态中,对任意一个类,都能知道该类的所有属性和方法;对任意一个对象,都能调用它的任意一个方法和属性。

反射机制的作用:1、在运行时判断任一对象所属的类;    2、在运行时构造任一类的对象;    3、在运行时判断任一类所具有的成员变量和方法;    4、在运行时调用任意一个对象的方法;    5、生成动态代理

RTTI和反射真正的区别在于:前者编译器是在编译时打开和检查.class文件;而后者是在运行时才执行

设计模式未看

interface关键字一个重要的目标是允许程序员隔离构件,进而降低耦合性

Class类和java.lang.reflect类库一起对反射进行了支持。类库中包含了Field,Method以及Constructor类。这些类型对象是由jvm在运行时创建的。用以表示未知类里的对象。其中用invoke()调用与Method对象关联的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值