读书人

java 运行时部类识别(RTTI) - 1 - Cla

发布时间: 2012-09-05 15:19:34 作者: rapoo

java 运行时类型识别(RTTI) - 1 - Class与instanceof

java 运行时类型识别(RTTI) - 1 - Class与instanceof

java 运行时类型识别(RTTI) - 2 - 反射

?

三种方式:

1.传统类型转换

2.查询Class对象

3.instanceof

?

1.传统类型转换

String string = (String) s;

2.查询Class对象

首先需要了解一下java.lang.Class这个类

?

类型信息在运行时的表示是有Class这个类的实例完成的

java使用Class对象来执行其RTTI,即使是类似转型的这样的操作

每个类都有一个Class对象(被保存在一个同名的.class文件中),为了生成这个类的对象,运行这个程序的JVM将使用被称为"类加载器"的子系统

(有关类加载器的内容,稍后介绍)

?

一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象

?

?

?结果

?

Testing x of type class Test$Base

x instanceof Base true

x instanceof Derived false

Base.isInstance(x) true

Derived.isInstance(x) false

x.getClass() == Base.class true

x.getClass() == Derived.class false

x.getClass().equals(Base.class) true

x.getClass().equals(Derived.class) false

----------------------------

Testing x of type class Test$Derived

x instanceof Base true

x instanceof Derived true

Base.isInstance(x) true

Derived.isInstance(x) true

x.getClass() == Base.class false

x.getClass() == Derived.class true

x.getClass().equals(Base.class) false

x.getClass().equals(Derived.class) true

?

可以看出:instanceof与isInstance()结果一样,equals和==的结果一样

instanceof是类型检查,==是对象比较,不考虑继承等关系.

个人觉得比较好理解


java 运行时部类识别(RTTI) - 1 - Class与instanceof

?

?

?

类加载器

这里只贴出笔记,之后在总结虚拟机的时候再详细说明,会在这里给出链接


java 运行时部类识别(RTTI) - 1 - Class与instanceof

?

读书人网 >编程

热点推荐