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可以在运行时知道一个对象的类型信息。RTTI在Java中主要通过两种形式存在:一种是传统的类型转换,也就是instanceof关键字和类的cast方法;另一种是反射机制。RTTI的实现依赖于Java类模型中的Class...
随后介绍了Java中的高级技术,详细讨论了其中的多线程、集合、泛型、RTTI等。这些基本知识介绍完毕之后,就进入到实际编程阶段,先后介绍了GUI程序设计、多媒体程序设计、数据库和网络程序设计,这些知识均以示例...
它支持D语言的大部分特性,包括模板、异常处理、内联函数等,为D语言的实践应用提供了坚实的基础。 D语言的核心特性包括: 1. 面向对象编程:D语言支持类、接口和继承,具备多态性,提供了丰富的面向对象设计工具...
- **内容概述**:本书旨在为Java开发者提供深入浅出的技术指导,聚焦于Java语言本身及其编程技巧。 #### 二、面向对象编程与Java - **面向对象编程(OOP)**:一种软件开发方法论,通过抽象、封装、继承和多态等概念...
Java是一种广泛使用的面向对象的编程语言,其语法严谨,功能强大。对于初学者,了解Java的基础概念和常用语法是入门的关键。以下将详细介绍标题和描述中提到的知识点: 1. **第一个Java程序**:通常从"Hello, World...
"Java 反射机制详解" Java 反射机制是在运⾏状态中,对于任意⼀个类,都能够知道这个类的所有属性和⽅法;...深入理解 Java 反射机制可以帮助我们更好地使用 Java 语言,提高编程效率和代码质量。
本书不仅涵盖了Java语言的基础,还深入探讨了语言的高级特性,旨在帮助程序员更好地理解和运用Java进行面向对象编程。 #### 面向对象编程(OOP) Java作为一门优秀的面向对象编程语言,具备OOP的核心特征,包括封装、...
写在前面的话 ...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 推荐读物
《Practical Java》和《Effective Java》正是这样两部著作,它们对Java的重要而基础的技术细节进行了详尽、深刻的介绍和剖析,每个主题独立成章,既方便读者根据需求选择性阅读,又能彼此呼应,形成一个完整的学习...
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于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 推荐读物
### 《Thinking in Java》第四版重要知识点概览 #### 第1章 对象入门 - **对象的概念**:介绍面向对象编程的基本概念...通过系统地学习本书内容,可以帮助读者全面掌握Java语言的各个方面,并提升解决实际问题的能力。
Java元数据——Class类 Java中的元数据Class类是一个基础的概念,它代理了这个类的类型信息、方法签名、属性等信息。每个类都有一个Class对象,它用来...正确地使用 Class 对象可以帮助我们更好地理解和使用Java语言。
引言 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 一般书籍
JAVA反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(检查和修改其自身状态)的能力。具体来说,Java反射机制允许程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个...
引言 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 一般书籍