专业的JAVA编程教程与资源

网站首页 > java教程 正文

java 核心技术-12版 卷Ⅰ- 7.1.1 异常分类

temp10 2024-11-08 13:58:13 java教程 11 ℃ 0 评论

原文

7.1.1 异常分类

在 Java 程序设计语言中,异常对象都是派生于 Throwable 类的一个类的实例。稍后还会看到,如果 Java 中内置的异常类不能满足需求,用户还可以创建自己的异常类。图 7-1 是 Java 异常层次结构的一个简化示意图。

Java中的异常层次结构

java 核心技术-12版 卷Ⅰ- 7.1.1 异常分类

需要注意的是,所有的异常都是由 Throwable 继承而来,但在这个层次结构中,下一层立即分为两个分支:Error和 Exception。

Error类层次结构描述了 Java 运行时系统的内部错误和资源耗尽问题。你不应该抛出这种类型的对象。如果出现了这样的内部错误,除了通知用户,并尽力妥善地终止程序之外你几乎无能为力。这种情况很少出现。

编写Java 程序时,要重点关注 Exception 层次结构。这个 Exception 层次结构又分为两个分支:一个分支派生于 RuntimeException ; 另一个分支包括其他异常,不继承这个类。一般规则是:由编程错误导致的异常属于 RuntimeException ; 如果程序本身没有问题,但由于I/O错误之类的问题导致的异常属于其他异常。

继承自 RuntimeException 的异常包括以下问题

  • 错误的强制类型转换。
  • 越界的数组访问。
  • 访问null 指针。

不继承自 RuntimeException 的异常包括

  • 试图越过文件末尾继续读取数据。
  • 试图打开一个不存在的文件。
  • 试图根据给定的字符串查找 class 对象,而这个字符串表示的类并不存在

“如果出现 RuntimeException 异常,那么一定是你的问题”,这个规则很有道理。应该通过检测数组索引是否越界来避免ArrayIndexOutOfBoundsException 异常;如果你在使用变量之前先检查它是否为null,NullPointerException 异常就不会发生。

如何处理不存在的文件呢?道不能先检查文件是否存在再打开它吗?嗯、这个文件有可能在你检查它是否存在之后就被立即副除。因此,“是否存在”取决于环境,而不只是取决于你的代码。

Java语言规范将派生于Error类或RntineException 类的所有异常称为非检查型(unchecked)异常,所有其他异常称为检查型(checked) 异常。这是很有用的术语、这本书中也会采用这些术语。编译器将检查你是否为所有的检查型异常提供了异常处理器。

注释: RuntimeException 这个名字很容易让人混淆。当然了,我们讨论的所有惜误都发生在运行时。这个名字可以追溯到很久很久以前,那时 Oak (Java的前身)的“运行时”会生成越界异常和 null 指针异拿。I/O 异常可能由某个其他组件生成。

CC++注释:如果熟悉标准C++ 库中(更为受限)的异常层次结构,可能会很困惑,C++有两个基本的异常类,一个是runtime_error;另一个是logic_error。logic_error类相当于Java中的RuntimeException,也表示程序中的逻辑错误;runtime_error 类是所有由于不可预测的问题所引发的异常的基类。它相当于Java 中非 RuntimeException 类型的异常。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表