错误和异常之间的区别是什么?

< p > 可能的复制品: < br > 异常与错误的区别

如何区分 Java 中的错误和异常?

322918 次浏览
一般来说,没有人能够控制或猜测什么时候会发生错误。异常可以猜测,也可以处理。 在 Java 中,Exception 和 Error 是 Throwable 的子类,它们是根据程序控制来区分的。错误,例如 OutOfMemory 错误,没有程序员能够猜到并且能够处理它。它依赖于基于架构、操作系统和服务器配置的动态。例外的程序员可以处理它,并可以避免应用程序的错误行为。例如,如果您的代码正在查找一个不可用的文件,则会引发 IOException。这样的实例程序员可以猜测并处理它。译注:

错误是大多数时候你无法处理的事情。

“例外”是为了给你一个机会去利用它。比如尝试其他事情或者写日志。

try{
//connect to database 1
}
catch(DatabaseConnctionException err){
//connect to database 2
//write the err to log
}
“错误”表示严重的问题 合理的申请 不要试图抓住。”

同时

例外”表示条件 一个合理的申请 想要抓住。”

RuntimeException及其子类一起出错的是 unchecked异常。所有其他异常类都是 checked异常。

检查过了异常通常是那些程序可以从中恢复的异常,通过编程方式从这些异常中恢复可能是一个好主意。例如 FileNotFoundExceptionParseException等。程序员应该使用 try-catch 块检查这些异常,或者将其抛回给调用者

另一方面,我们有 不受约束异常。如果一切正常,这些异常可能不会发生,但它们确实会发生。例如 ArrayIndexOutOfBoundExceptionClassCastException等。许多应用程序将使用 try-catchthrows子句的 RuntimeExceptions及其子类,但从语言的角度来看,它不是必须这样做。请注意,从 RuntimeException恢复通常是可能的,但是设计类/异常的人认为最终程序员没有必要检查这些异常。

错误也是未检查的异常和程序员不需要做任何与这些。事实上,对于错误使用 try-catch子句是一个坏主意。大多数情况下,从一个错误恢复是不可能的,应该允许程序终止。例子包括 OutOfMemoryErrorStackOverflowError等。

请注意,虽然错误是未检查的异常,但是我们不应该尝试处理它们,但是在代码中处理 RuntimeExceptions(也是未检查的异常)是可以的。检查的异常应该由代码处理。

ErrorException都扩展了 Throwable,但是大多数 Error是由 JVM 抛出的,这种情况是致命的,应用程序无法从错误中恢复。例如 OutOfMemoryError

虽然即使应用程序也可以引发 Error,但这并不是一个好的做法,相反,应用程序应该对可恢复条件使用检查异常,对编程错误使用运行时异常。