错误和例外有什么区别?

hir*_*mit 135 java exception

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

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

Nir*_*ond 191

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

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

错误以及RuntimeException&他们的子类是unchecked例外.所有其他异常类都是checked例外.

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

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

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

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

  • @corsiKa应该由程序员检查无效的用户输入. (16认同)
  • `RuntimeException`S通常是由编程错误引起的. (10认同)
  • 相反,wulfgar,我的经验告诉我`RuntimeException是无效用户输入的结果. (8认同)
  • 我猜@corsiKa很讽刺 (2认同)
  • @mochomecha是的,是的应该是.当它无法恢复时,会抛出一些`RuntimeException`的子类.这就是该类的用途:发出无效的用户输入信号. (2认同)
  • @mochomecha 我很困惑。内存不足是错误,而不是异常。那就更难恢复了。连接中断只是不良用户输入的另一种形式。只有用户、程序和环境。如果环境破坏了,那就是一个错误。如果程序中断,则属于例外情况。如果用户中断,则属于运行时异常。非常简单的东西。 (2认同)

Jug*_*hah 17

Error并且Exception两者都是扩展的Throwable,但主要Error是JVM在一个致命的场景中抛出,并且应用程序无法从该错误中恢复.例如OutOfMemoryError.

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

  • 我可能有一个示例,您可能想尝试从“错误”中恢复(例如,“ OutOfMemoryError”)。假设您有一个移动应用程序,并且想要放置背景图片。在某些旧的或内存不足的设备上,这可能是不可能的(不占用应用程序本身的内存)。因此,有两种选择,您将在每次想要显示此类图片时检查它是否可能,或者只是尝试显示它,如果失败了,您将捕获到`OutOfMemoryError`并继续使用。 (2认同)

fat*_*zzy 12

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

例外是为了让您有机会使用它.喜欢尝试其他东西或写入日志.

try{
  //connect to database 1
}
catch(DatabaseConnctionException err){
  //connect to database 2
  //write the err to log
}
Run Code Online (Sandbox Code Playgroud)


nic*_*cks 6

通常错误是没有人可以控制或猜测何时发生的错误,可以猜测和处理异常。在Java中,Exception和Error是Throwable的子类。它是根据程序控制来区分的。诸如OutOfMemory Error之类的错误,程序员无法猜测并可以处理它。它依赖于体系结构,操作系统和服务器配置而动态依赖。异常程序员可以处理它并避免应用程序的异常行为,例如,如果您的代码正在寻找一个不可用的文件,则抛出IOException,这样的实例程序员可以猜测并可以处理它。