已处理和未处理的异常有什么区别

What is the difference between handled and un-handled exceptions

我想知道 Java 中已处理异常和未处理异常之间的区别。 我应该使用哪个 try/catch 块以及何时必须扩展 throwables。

此外,如果我扩展 throwable,我是否总是必须在单独的 class 中处理异常?

如果要在单独的 class 中处理异常,我可以创建自定义功能(例如调用另一个方法或中断循环)而不是仅使用自定义消息覆盖超级构造函数吗?

我推测 'handled and unhandled' 异常是指 'checked and unchecked'。

未经检查的异常 - 所有扩展 RuntimeException 的 classes 都被称为未经检查的。它们通常表示编程错误,例如逻辑错误或 API.

的不当使用

未经检查的异常示例:

● ArithmeticException
● NullPointerException
● IndexOutOfBoundsException
● IllegalArgumentException
● ClassCastException

例如,如果您尝试访问只有 5 个单元格的数组的第 10 个单元格,则会导致 ArrayIndexOutOfBoundsException。这是一个程序员的错误和程序员的错误,所以应该这样对待。此异常不应使用 try/catch 处理,而应使用 if 语句检查数组的大小。

已检查异常s - 这些是编写良好的应用程序应该预见并从中恢复的异常情况。 Java 中的检查异常扩展了 Exception class 但不扩展 RuntimeException class。检查异常受“捕获或指定要求“:

当方法体中的某些代码可能抛出已检查的异常时,该方法必须处理此异常或指定它可能会抛出此异常

已检查异常的示例:

● FileNotFoundException
● IOException
● SQLException

例如,您可能有一个写得非常好的代码,可以将数据读取或写入文件,但另一个用户可能会突然从文件系统中删除该文件。这不是程序员的错误,但它可以发生,因此您必须预见并处理这种情况。

总结一下: 未经检查的异常 不应 使用 try/catch 处理 - 它们应被视为错误并应修复(或使用 if 语句避免)。当然,您可以使用 try/catch 块来处理 RuntimeException(例如 NullPointerException),但这 不是 一个好的做法。

已检查的异常必须要么用try/catch块处理,要么当方法不知道如何处理它们时,它们应该被声明为由方法抛出本身。因此,处理异常的责任转移到了将调用该方法的方法。这就是 Catch or Specify 要求所说的。