错误和例外有什么区别?
可能重复:
exception与错误的区别
如何区分Java中的错误和exception?
错误“表示合理应用程序不应该试图捕捉的严重问题”。
而
一个例外“表示一个合理的应用程序可能想要捕捉的条件。
错误以及RuntimeException
及其子类是unchecked
exception。 所有其他exception类都是checked
exception。
检查的exception通常是程序可以从中恢复的exception,这可能是以编程方式从这些exception中恢复的好主意。 例子包括FileNotFoundException
, ParseException
等。程序员希望通过使用try-catch块来检查这些exception,或者把它返回给调用者
另一方面,我们有未经检查的例外。 这些都是那些如果一切顺利都不会发生的例外,但是确实发生了。 示例包括ArrayIndexOutOfBoundException
, ClassCastException
等。许多应用程序将使用try-catch
或throws
子句来处理RuntimeExceptions
及其子类,但从语言的angular度来看,并不需要这样做。 请注意,从RuntimeException
中恢复通常是可能的,但devise类/exception的人认为最终程序员不需要检查这种exception。
错误也是未经检查的exception,程序员不需要对这些做任何事情。 实际上,对于错误使用try-catch
子句是一个坏主意。 大多数情况下,从错误中恢复是不可能的,程序应该被允许终止。 例子包括OutOfMemoryError
, StackOverflowError
等
请注意,虽然错误是未经检查的exception,但我们不应该试图处理它们,但是可以在代码中处理RuntimeExceptions
(也是未经检查的exception)。 检查的exception应该由代码处理。
Error
和Exception
都扩展Throwable
,但是大部分Error
是由JVM在一个致命的情况下引发的,应用程序无法从该错误中恢复。 例如OutOfMemoryError
。
虽然应用程序可以引发一个Error
但它不是一个好的做法,相反,应用程序应该使用检查的exception进行可恢复的条件和运行时exception,以避免编程错误。
错误是大多数情况下你无法处理的。
例外是为了给你一个机会去做一些事情。 像尝试别的东西或写入日志。
try{ //connect to database 1 } catch(DatabaseConnctionException err){ //connect to database 2 //write the err to log }
一般来说,错误是没有人能够控制或者猜测的时候发生的.Exception可以被猜到并且可以被处理。 在Java中,exception和错误是Throwable的子类,它是基于程序控制的差异化的。OutOfMemory Error等错误是程序员无法猜测和处理的。它依赖于基于结构,OS和服务器的dynamicconfiguration。例外程序员可以处理它,并可以避免应用程序的错误行为。例如,如果您的代码正在寻找一个不可用的文件,则抛出IOException。这样的程序员可以猜测和处理它。