发布于 2011-04-28 12:40:48
An Error“表示合理的应用程序不应该尝试捕获的严重问题。”
而
An Exception“表示合理的应用程序可能希望捕获的条件。”
Error以及RuntimeException
&它们的子类都是unchecked
异常。所有其他异常类都是checked
异常。
检查的异常通常是程序可以恢复的异常&以编程方式恢复这类异常可能是一个好主意。示例包括FileNotFoundException
、ParseException
等。程序员应该通过使用try-catch块检查这些异常,或者将其抛回调用者
另一方面,我们有未检查的异常。如果一切正常,这些异常可能不会发生,但它们确实会发生。示例包括ArrayIndexOutOfBoundException
、ClassCastException
等。许多应用程序会对RuntimeExceptions
及其子类使用try-catch
或throws
子句,但从语言的角度来看,这并不是必需的。一定要注意,从RuntimeException
恢复通常是可能的,但是设计类/异常的人认为最终程序员没有必要检查这样的异常。
错误也是未检查的异常&程序员不需要对这些异常做任何事情。事实上,使用try-catch
子句处理错误并不是一个好主意。大多数情况下,从错误中恢复是不可能的&应该允许程序终止。示例包括OutOfMemoryError
、StackOverflowError
等。
请注意,虽然错误是未检查的异常,但我们不应该尝试处理它们,但在代码中处理RuntimeExceptions
(也是未检查的异常)是可以的。检查的异常应该由代码处理。
发布于 2011-04-28 12:41:15
Error
和Exception
都扩展了Throwable
,但在致命的情况下,Error
主要是由JVM抛出的,应用程序无法从该错误中恢复。例如OutOfMemoryError
。
尽管即使是应用程序也可以引发Error
,但这不是一个好的做法,相反,应用程序应该使用检查异常来处理可恢复的条件,并使用运行时异常来处理编程错误。
发布于 2011-04-28 12:27:12
错误是大多数时候你不能处理的东西。
Exception的目的是给你一个机会去做一些事情。例如尝试其他操作或写入日志。
try{
//connect to database 1
}
catch(DatabaseConnctionException err){
//connect to database 2
//write the err to log
}
https://stackoverflow.com/questions/5813614
复制相似问题