错误和例外有什么区别? [重复]

问题

可能重复:异常和错误之间的差异

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


#1 热门回答(153 赞)

错误"表示合理的应用程序不应该试图捕获的严重问题。"

异常"表示合理的应用程序可能想要捕获的条件。"

RuntimeException及其子类一起出错是uncheckedexceptions。所有其他异常类都是checkedexceptions。

已检查exception通常是程序可以恢复的那些,并且以编程方式从这些异常中恢复可能是个好主意。示例包括FileNotFoundException,ParseException等。程序员应该通过使用try-catch块检查这些异常或将其抛回调用者

另一方面,我们有未选中例外。这些是如果一切都井然有序可能不会发生的例外情况,但确实会发生。示例包括ArrayIndexOutOfBoundException,ClassCastException等。许多应用程序将使用try-catchthrowsclause用于RuntimeExceptions及其子类,但从语言角度来看,不需要这样做。请注意,从aRuntimeException恢复通常是可能的,但设计类/异常的人认为最终程序员不必检查此类异常。

错误也是未经检查的异常,程序员不需要对这些做任何事情。事实上,对于错误使用atry-catchclause是一个坏主意。大多数情况下,无法从错误中恢复,应该允许程序终止。示例包括OutOfMemoryError,StackOverflowError等。

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


#2 热门回答(16 赞)

ErrorException两个extendThrowable,但主要是27727598由JVM抛出,这是致命的情况,应用程序无法从该错误中恢复。例如OutOfMemoryError

虽然应用程序甚至可以引发一个不太好的实践,但应用程序应该使用已检查的异常可恢复条件和运行时异常来编程错误。


#3 热门回答(12 赞)

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

例外是为了让你有机会用它做点什么。喜欢尝试其他东西或写入日志。

try{
  //connect to database 1
}
catch(DatabaseConnctionException err){
  //connect to database 2
  //write the err to log
}