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