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

Ema*_*mid 2 exception-handling exception try-catch throwable

我想知道Java中处理和未处理的异常之间的区别.哪一个我应该使用try/catch块,当我必须扩展throwables.

另外,如果我扩展throwables,我是否总是要在一个单独的类中处理异常?

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

Kra*_*oev 6

我假设'处理和未处理'的例外,你的意思是'检查和未检查'.

未经检查的异常 - 所有扩展RuntimeException的类都被称为未选中.它们通常表示编程错误,例如逻辑错误或API的不当使用.

未经检查的异常示例:

? ArithmeticException
? NullPointerException
? IndexOutOfBoundsException
? IllegalArgumentException
? ClassCastException
Run Code Online (Sandbox Code Playgroud)

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

检查异常 - 这些是编写良好的应用程序应该预期和恢复的特殊条件.Java中的已检查异常扩展了Exception类,但不扩展RuntimeException类.已检查的例外情况受" 捕获或指定要求 "的约束:

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

已检查例外的示例:

? FileNotFoundException
? IOException
? SQLException
Run Code Online (Sandbox Code Playgroud)

例如,您可能拥有一个编写良好的代码,可以将数据读取或写入文件,但该文件可能会被另一个用户从文件系统中突然删除.这不是一个错误programmer`s,但CAN发生,所以你必须预测并处理这种情况.

因此,要总结:未检查异常不可在处理与try/catch-他们应该被视为一个错误,应该是固定的(或避免if语句).当然你可以使用try/catch块来处理RuntimeException(例如NullPointerException),但这不是一个好习惯.

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