如何区分Java中的错误和异常?
答案 0 :(得分:173)
错误“表示严重问题 合理的申请应该 不要试图抓住。“
,而
异常“表示条件 合理的申请可能 想赶上。“
错误以及RuntimeException
&他们的子类是unchecked
例外。所有其他异常类都是checked
例外。
已检查例外通常是程序可以恢复的例外情况。以编程方式从这些异常中恢复可能是个好主意。示例包括FileNotFoundException
,ParseException
等。程序员应使用try-catch块检查这些异常,或将其抛回调用者
另一方面,我们有未经检查的例外。这些是如果一切都井然有序可能不会发生的例外情况,但确实会发生。示例包括ArrayIndexOutOfBoundException
,ClassCastException
等。许多应用程序将使用try-catch
或throws
条款用于RuntimeExceptions
&他们的子类,但从语言的角度来看,不需要这样做。请注意,通常可以从RuntimeException
进行恢复,但设计类/异常的人认为最终程序员无需检查此类异常。
错误也是未经检查的异常&程序员不需要对这些做任何事情。实际上,对错误使用try-catch
子句是个坏主意。大多数情况下,从错误中恢复是不可能的。该程序应该被允许终止。示例包括OutOfMemoryError
,StackOverflowError
等。
请注意,尽管错误是未经检查的异常,但我们不应尝试处理它们,但可以在代码中处理RuntimeExceptions
(也是未经检查的异常)。检查的异常应该由代码处理。
答案 1 :(得分:16)
Error
和Exception
都扩展Throwable
,但JVM在一个致命的场景中抛出大多数Error
,并且应用程序无法恢复从那个错误。例如OutOfMemoryError
。
虽然应用程序甚至可以引发Error
,但它只是一个不太好的做法,而应用程序应该使用已检查的异常可恢复条件和运行时异常来编程错误。
答案 2 :(得分:12)
错误是大多数时候你无法处理的错误。
异常旨在让您有机会对其采取行动。比如尝试别的东西或写日志。
try{
//connect to database 1
}
catch(DatabaseConnctionException err){
//connect to database 2
//write the err to log
}
答案 3 :(得分:6)
一般来说,错误是没有人可以控制或猜测它何时发生。可以猜到异常并且可以处理。 在Java Exception和Error是Throwable的子类。它基于程序控制而区分。诸如OutOfMemory之类的错误,没有程序员可以猜测并且可以处理它。它依赖于基于架构,操作系统和服务器配置的动态。异常程序员可以处理它并且可以避免应用程序的错误行为。例如,如果您的代码正在查找不可用的文件,则抛出IOException。这样的实例程序员可以猜测并且可以处理它。