2011-04-28 60 views

回答

133

一个错误“表示严重问题 合理的应用程序应该 不要试图赶上。”

了异常 “表示条件 合理的应用程序可能 想赶上。”

Error随RuntimeException &其子类unchecked例外。所有其他异常类别都是checked例外。

检查例外通常是程序可以从中恢复的那些&以编程方式从这些例外中恢复可能是一个好主意。例子包括FileNotFoundExceptionParseException等程序员,预计通过使用try-catch块来检查这些异常或扔回去给调用者

在另一方面,我们有选中例外。这些都是那些如果一切顺利都不会发生的例外,但它们确实发生了。示例包括ArrayIndexOutOfBoundExceptionClassCastException等。许多应用程序将使用try-catchthrows子句为RuntimeExceptions &其子类,但从语言角度来看,它不需要这样做。请注意,从RuntimeException恢复通常是可能的,但设计类/异常的人认为最终程序员没有必要检查这些异常。

错误也未经检查异常&程序员不需要对这些做任何事情。实际上,对于错误使用try-catch子句是一个坏主意。大多数情况下,从错误中恢复是不可能的。&程序应该被允许终止。例子包括OutOfMemoryErrorStackOverflowError

请注意,虽然错误是未经检查的异常,我们不应该试图对付他们,但它是确定以应对代码RuntimeExceptions(也unchecked异常)。检查的异常应该由代码处理。

+7

'RuntimeException'S通常是由不良编程引起的。 – wulfgarpro 2012-09-09 08:46:47

+5

恰恰相反,wulfgar,我的经验告诉我,RuntimeException是用户输入无效的结果。 – corsiKa 2015-04-19 04:45:35

+9

@corsiKa无效的用户输入应该由程序员检查。 – mochomecha 2016-05-25 08:19:37

4

一般而言,错误是指任何人都无法控制或猜测它何时发生.Exception可以被猜测并且可以被处理。 Java中的异常和错误是Throwable的子类,它是基于程序控制进行区分的。例如OutOfMemory Error等错误,程序员无法猜测并且可以处理它。它依赖于基于结构,操作系统和服务器配置的动态.Where因为Exception程序员可以处理它,并且可以避免应用程序的错误行为。例如,如果您的代码正在查找不可用的文件,则抛出IOException。此类实例程序员可以猜测并处理它。

11

错误是大多数情况下你无法处理的东西。

例外是为了给你一个机会去做一些事情。就像尝试别的东西或写入日志。

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

ErrorException都扩展Throwable,但大多Error由JVM中的场景是致命的,是没有办法的应用程序,以从错误中恢复抛出。例如OutOfMemoryError

虽然即使应用程序也可以引发Error,但它不是一个好习惯,相反,应用程序应该使用检查的异常来处理可恢复的条件,并使用运行时异常来处理编程错误。

+0

我可能有一个例子,你可能想尝试从'Error'(例如'OutOfMemoryError')恢复。假设你有一个移动应用程序,并且你想放置一张背景图片。在某些旧的或较低的内存设备上,这可能是不可能的(应用程序本身没有留下内存)。所以有两个选项你会检查它是否可能每次你想显示这样的图片,或者你只是试图显示它,如果它会失败,你赶上'OutOfMemoryError'并继续没有它。 – 2015-12-11 07:08:42