Thinking in Java 第十章“类型检查”要点总结

1.RTTI (runtime type indentification)

当只有一个指向对象的基类的引用时,RTTI可以知道它的确切的类型。

传统RTTI和反射。

2.Class对象

class对象包含类相关的所有信息,他可以用来创建类的常规对象。

每当编译了一个新类,就会产生一个class对象(保存在同名的class文件中)。当我们想生成某个类的对象时,JVM就会检查这个类的class对象是否已经生成,如果生成,就用该class对象生成该类对象;如果没有生成,那么JVM就会根据类名.class文件,将其载入。

Class.forName()方法的参数是“包名”+"类名"!

3.生成Class对象的引用

1,使用Class.froName()方法,它的返回值就是一个Class对象

2.类字面常量:直接用类名.class

3.用Object的getClass()方法。

4.RTTI形式

1.用括号转型

2.利用class对象来确定类型

3.利用instanceof来确定是否“从属于”类型;还可以使用class的引用.isInstance(Object)方法。

5.等价性(instanceof 和 .class)

instanceof包含一个继承的概念

class就不包括

6.反射

https://www.zhihu.com/question/24304289/answer/147529485

RTTI可以告诉你某个对象的确切类型,前提是:这个类型在编译器必须可知。

RTTI在编译器打开和检查.class文件,而对于反射机制来说,.class文件在编译器缉拿是不可获取的,所以是在运行期间打开和检查.class文件。

其中的.class必须对于JVM来说是可取的,要么在本机要么在网络上可取。

7.向下转型

8.证明char[]是对象

法一:基本类型是没有方法的,所以如果char[]可以调用Object的方法,就说明char[]是对象

法二:直接看他的父类

9. 最好不要将特定类所需要的方法放在接口中,因为这样每个都要实现这个方法,对于不需要实现这个方法的类来说太繁琐

法一:

法二:将方法置于基类中(不再使用接口)

猜你喜欢

转载自blog.csdn.net/weixin_38967434/article/details/82251982