< p > 可能的复制品: < br > 异常与错误的区别
如何区分 Java 中的错误和异常?
错误是大多数时候你无法处理的事情。
“例外”是为了给你一个机会去利用它。比如尝试其他事情或者写日志。
try{ //connect to database 1 } catch(DatabaseConnctionException err){ //connect to database 2 //write the err to log }
“错误”表示严重的问题 合理的申请 不要试图抓住。”
同时
例外”表示条件 一个合理的申请 想要抓住。”
与 RuntimeException及其子类一起出错的是 unchecked异常。所有其他异常类都是 checked异常。
RuntimeException
unchecked
checked
检查过了异常通常是那些程序可以从中恢复的异常,通过编程方式从这些异常中恢复可能是一个好主意。例如 FileNotFoundException、 ParseException等。程序员应该使用 try-catch 块检查这些异常,或者将其抛回给调用者
FileNotFoundException
ParseException
另一方面,我们有 不受约束异常。如果一切正常,这些异常可能不会发生,但它们确实会发生。例如 ArrayIndexOutOfBoundException、 ClassCastException等。许多应用程序将使用 try-catch或 throws子句的 RuntimeExceptions及其子类,但从语言的角度来看,它不是必须这样做。请注意,从 RuntimeException恢复通常是可能的,但是设计类/异常的人认为最终程序员没有必要检查这些异常。
ArrayIndexOutOfBoundException
ClassCastException
try-catch
throws
RuntimeExceptions
错误也是未检查的异常和程序员不需要做任何与这些。事实上,对于错误使用 try-catch子句是一个坏主意。大多数情况下,从一个错误恢复是不可能的,应该允许程序终止。例子包括 OutOfMemoryError、 StackOverflowError等。
OutOfMemoryError
StackOverflowError
请注意,虽然错误是未检查的异常,但是我们不应该尝试处理它们,但是在代码中处理 RuntimeExceptions(也是未检查的异常)是可以的。检查的异常应该由代码处理。
Error和 Exception都扩展了 Throwable,但是大多数 Error是由 JVM 抛出的,这种情况是致命的,应用程序无法从错误中恢复。例如 OutOfMemoryError。
Error
Exception
Throwable
虽然即使应用程序也可以引发 Error,但这并不是一个好的做法,相反,应用程序应该对可恢复条件使用检查异常,对编程错误使用运行时异常。