Java语言基础:RTTI
1.
每个类都有一个Class对象,当我们在运行期第一次生成类的实例时,JVM就加载这个类的Class对象,然后用这个Class对象来创建类实例;Class类似于Delphi中的引用类TClass,用于保存类的运行时信息。
2.
Class的static方法forName()用于查找某个类的Class对象,如果forName找不到你要的类的Class对象,会抛出ClassNotFoundException异常:
-
class
A{
-
}
-
-
public
class
Main {
-
public
static
void
main(String[] args) {
-
try
{
-
Class<?> cls = Class.forName("A"
);
-
System.out.println(cls.getName());
-
} catch
(ClassNotFoundException e) {
-
e.printStackTrace();
-
}
-
}
-
}
3. 查找类的Class对象的另一个方法是直接调用类.class,这会在编译期就检查是否正确,因此不需要捕获异常:
-
class
A{
-
}
-
-
public
class
Main {
-
public
static
void
main(String[] args) {
-
-
Class<A> acls = A.class
;
-
System.out.println(acls.getName());
-
-
Class<Integer> icls = int
.
class
;
-
System.out.println(icls.getName());
-
}
-
}
4. 判断两个对象是否属于同一个类,可以通过比较他们的class的方式,通过对象的getClass()方法可以得Class对象:
-
class
A{
-
}
-
class
B
extends
A {
-
}
-
public
class
Main {
-
public
static
void
main(String[] args) {
-
A a = new
B();
-
B b = new
B();
-
-
if
(a.getClass() == b.getClass())
-
System.out.print("yes"
);
-
else
-
System.out.print("no"
);
-
}
-
}
5.
要判断对象是否继承或属于某个类,可以通过两个方法:1是使用instanceof关键字,2是使用Class.isInstance方法:
-
class
A{
-
}
-
class
B
extends
A {
-
}
-
public
class
Main {
-
public
static
void
main(String[] args) {
-
A a = new
B();
-
B b = new
B();
-
-
if
(a
instanceof
A)
-
System.out.println("Yes"
);
-
-
if
(b
instanceof
B)
-
System.out.println("Yes"
);
-
-
if
(A.
class
.isInstance(a))
-
System.out.println("Yes"
);
-
if
(B.
class
.isInstance(a))
-
System.out.println("Yes"
);
-
}
-
}
6. Class.NewInstance可以创建一个类实例,该类必须有默认构造函数,否则会抛出InstantiationException异常:
-
class
A{
-
}
-
public
class
Main {
-
public
static
void
main(String[] args) {
-
try
{
-
A a = A.class
.newInstance();
-
} catch
(InstantiationException e) {
-
e.printStackTrace();
-
} catch
(IllegalAccessException e) {
-
e.printStackTrace();
-
}
-
}
-
}
7. Class还提供了一些更强大的方法,可以得到类的更多信息,比如:getSuperclass: 取得父类的Class对象;getInterfaces:
取得实现的接口数组;还有其他很多方法,详见JavaDoc。
原文地址:http://blog.csdn.net/linzhengqun/archive/2011/03/28/6284929.aspx
分享到:
相关推荐
随后介绍了Java中的高级技术,详细讨论了其中的多线程、集合、泛型、RTTI等。这些基本知识介绍完毕之后,就进入到实际编程阶段,先后介绍了GUI程序设计、多媒体程序设计、数据库和网络程序设计,这些知识均以示例...
随后介绍了Java中的高级技术,详细讨论了其中的多线程、集合、泛型、RTTI等。这些基本知识介绍完毕之后,就进入到实际编程阶段,先后介绍了GUI程序设计、多媒体程序设计、数据库和网络程序设计,这些知识均以示例...
写在前面的话 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍
引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍
引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
写在前面的话 引言 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...
<br>(11) 第11章:运行期类型鉴定 若只有指向基础类的一个句柄,Java的运行期类型标鉴定(RTTI)使我们能获知一个对象的准确类型是什么。一般情况下,我们需要有意忽略一个对象的准确类型,让Java的动态绑定...
D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物 英文版主页 | 中文版主页 | 详细...
引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍
第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 ...
. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
引言 1. 前提 2. Java的学习 ...D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物
为什么我说Java是脚本语言 226 宽松语法,无语法语言 227 Linux与3D 228 伪码语言 229 最强大的语言原来是预处理 230 语言宿主 231 shell编程和交互式语句编程 232 Debug,编译期断言 232 图形原理之位图,图象和字体...
1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...
1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...