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是类型检查,==是对象比较,不考虑继承等关系.
个人觉得比较好理解
?
?
?
类加载器
这里只贴出笔记,之后在总结虚拟机的时候再详细说明,会在这里给出链接
?

