我想知道Java中已处理和未处理的异常之间的区别。哪一个我应该使用 try/catch 块,以及当我必须扩展 throwables 时。
另外,如果我扩展 throwables,我是否总是必须在单独的类中处理异常?
如果要在单独的类中处理异常,我可以创建自定义功能(例如调用另一个方法或中断循环)而不是仅使用自定义消息覆盖超级构造函数吗?
我想知道Java中已处理和未处理的异常之间的区别。哪一个我应该使用 try/catch 块,以及当我必须扩展 throwables 时。
另外,如果我扩展 throwables,我是否总是必须在单独的类中处理异常?
如果要在单独的类中处理异常,我可以创建自定义功能(例如调用另一个方法或中断循环)而不是仅使用自定义消息覆盖超级构造函数吗?
我认为“已处理和未处理”的异常是指“已检查和未检查”。
未经检查的异常- 所有扩展 RuntimeException 的类都称为未经检查的。它们通常表示编程错误,例如逻辑错误或 API 使用不当。
未经检查的异常示例:
● ArithmeticException
● NullPointerException
● IndexOutOfBoundsException
● IllegalArgumentException
● ClassCastException
例如,如果您尝试访问仅包含 5 个单元格的数组的第 10 个单元格,则会导致 ArrayIndexOutOfBoundsException。这是程序员的错误,也是程序员的错,所以应该这样对待。不应使用 try/catch 处理此异常,而应使用 if 语句检查数组的大小。
Checked exception s - 这些是编写良好的应用程序应该预测并从中恢复的异常情况。Java 中的已检查异常扩展了 Exception 类,但不扩展 RuntimeException 类。检查的异常受“<strong> Catch or Specify Requirement ”的约束:
当在方法体中某些代码可能会抛出已检查的异常时,该方法必须要么处理此异常,要么指定它可能会抛出此异常
检查异常的示例:
● FileNotFoundException
● IOException
● SQLException
例如,您可能有一个编写得很好的代码,可以将数据读取或写入文件,但该文件可能会突然被另一个用户从文件系统中删除。这不是程序员的错误,但它可能会发生,因此您必须预测并处理这种情况。
总结一下:未经检查的异常不应该被处理try/catch
——它们应该被视为一个错误并且应该被修复(或通过if
语句避免)。当然,您可以使用 try/catch 块来处理RuntimeException
(例如NullPointerException
),但这不是一个好习惯。
已检查的异常必须使用块处理,try/catch
或者当方法不知道如何处理它们时,应将它们声明为由方法本身抛出。因此,处理异常的责任转移到调用这个方法的方法上。这就是Catch or Specify要求所说的。