Throwable 是所有异常的父类,它有两个子类:Error 和 Exception。
Error :程序一旦出现 Error 错误,程序可能会停止运行。
Exception:与 Error 不同,程序中出现 Exception 异常有机会从问题中恢复,并尝试保持程序运行。
检查异常: 所有不是 Runtime Exception 的异常,统称为 Checked Exception,又被称为检查性异常。这类异常的产生不是程序本身的问题,通常由外界因素造成的。为了预防这些异常产生时,造成程序的中断或得到不正确的结果,Java 要求编写可能产生这类异常的程序代码时,一定要去做异常的处理。
非检查异常: Java 语言将派生于 RuntimeException 类或 Error 类的所有异常称为非检查性异常。
有两种方法可以处理抛出的异常:
在当前方法中通过
try-catch的方式处理该异常。在方法签名的后面通过
throws重新抛出该异常。
我们可以将所有的异常分为三类:
- 检查性异常(checked exceptions) 是必须在在方法的 throws 子句中声明的异常。它们扩展了异常,旨在成为一种“在你面前”的异常类型。JAVA希望你能够处理它们,因为它们以某种方式依赖于程序之外的外部因素。检查性异常表示在正常系统操作期间可能发生的预期问题。 当你尝试通过网络或文件系统使用外部系统时,通常会发生这些异常。 大多数情况下,对检查性异常的正确响应应该是稍后重试,或者提示用户修改其输入。
- 非检查性异常(unchecked Exceptions) 是不需要在throws子句中声明的异常。 由于程序错误,JVM并不会强制你处理它们,因为它们大多数是在运行时生成的。 它们扩展了 RuntimeException。 最常见的例子是 NullPointerException, 未经检查的异常可能不应该重试,正确的操作通常应该是什么都不做,并让它从你的方法和执行堆栈中出来。
- 错误(errors) 是严重的运行时环境问题,肯定无法恢复。 例如
OutOfMemoryError,LinkageError和StackOverflowError,通常会让程序崩溃。
了解异常类的类型后,我们可能需要回答以下问题:
- 异常情况有多糟糕以及异常的原因是什么?
- 如何解决这个异常?
- 我们需要重启JVM吗?
- 我们需要重写代码吗?
知道异常类,我们可以预测可能出错的地方。考虑潜在的原因,我们可以假设问题的原因是什么以及如何解决它。在接下来的段落中,我们将回顾常见的异常并调查潜在的原因是什么。在我们的调查中,我们假设应用程序足够稳定并且已经完成开发和测试。
0 Comments