网站首页 > java教程 正文
原文
7.1.1 异常分类
在 Java 程序设计语言中,异常对象都是派生于 Throwable 类的一个类的实例。稍后还会看到,如果 Java 中内置的异常类不能满足需求,用户还可以创建自己的异常类。图 7-1 是 Java 异常层次结构的一个简化示意图。
Java中的异常层次结构
需要注意的是,所有的异常都是由 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 类型的异常。
- 上一篇: 给小白讲java中两大怪物,附带面试题
- 下一篇: 字节码混淆:实现Java字节码加密的实战解析
猜你喜欢
- 2024-11-08 Java 程序员排行前 10 的错误,你有没有中?
- 2024-11-08 常见面试题之java系列(面试题目java)
- 2024-11-08 Android混淆相关(apk混淆)
- 2024-11-08 Java零基础知识必备「分层概念」(java分层领域模型 太麻烦)
- 2024-11-08 Java面试题分享(java面试题精选)
- 2024-11-08 Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)
- 2024-11-08 JS加密:JavaScript代码加密混淆(js代码加密原理)
- 2024-11-08 Java一键授权方案 离线授权 日期授权 代码授权 代码混淆
- 2024-11-08 Java 基础 - 类与对象(java中类和对象)
- 2024-11-08 Java开发者易犯错误Top10(java: 错误: 不支持发行版本 7)
你 发表评论:
欢迎- 05-23Java线程池:核心参数与最佳实践
- 05-23深入理解 Java 的线程池原理
- 05-23面试突击34:如何使用线程池执行定时任务?
- 05-23Java线程池核心参数调优指南:掌控并发世界的钥匙
- 05-23Java线程池:优雅管理并发任务的艺术
- 05-23一篇文章快速搞懂Java中常用的四种线程池
- 05-23Java线程池工作原理深度解读:从创建到任务执行的全过程
- 05-23一文看懂:Java线程池任务拒绝机制解析
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)