【问题标题】:What is difference between Errors and Exceptions? [duplicate]错误和异常有什么区别? [复制]
【发布时间】:2011-08-14 09:23:59
【问题描述】:

可能重复:
Differences betweeen Exception and Error

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

【问题讨论】:

  • 一般来说,我认为如果你发现一个错误,你就会停止程序运行,但有异常你可以分支你的控制流

标签: java exception


【解决方案1】:

“错误”表示存在严重问题 合理的申请应该 不要试图抓住。”

同时

异常“表示条件 一个合理的应用程序可能 想抓。”

错误以及RuntimeException 及其子类是unchecked 异常。所有其他异常类都是checked 异常。

已检查异常通常是程序可以从中恢复的异常,以编程方式从此类异常中恢复可能是个好主意。示例包括FileNotFoundExceptionParseException 等。程序员应使用 try-catch 块检查这些异常或将其扔回调用者

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

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

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

【讨论】:

  • RuntimeExceptionS 通常是由不良编程引起的。
  • 相反,wulfgar,我的经验告诉我RuntimeExceptions 是无效用户输入的结果。
  • @corsiKa 无效的用户输入应由程序员检查。
  • 我猜@corsiKa 是在讽刺
  • @mochomecha 是的,应该是。当它无法恢复时,它会抛出RuntimeException 的一些子类。这就是该类的真正用途:发出无效的用户输入信号。
【解决方案2】:

ErrorException 都扩展了Throwable,但大多数Error 是由JVM 在致命的情况下抛出的,应用程序无法从该错误中恢复。例如OutOfMemoryError

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

【讨论】:

  • 我可能有一个示例,您可能想尝试从Error(例如OutOfMemoryError)中恢复。假设您有一个移动应用程序,并且想要放置背景图片。在一些旧的或低内存的设备上,这可能是不可能的(没有为应用程序本身留下足够的内存)。因此,有 2 个选项,您将在每次想要显示此类图片时检查它是否可能,或者您只是尝试显示它,如果它失败,您捕获 OutOfMemoryError 并在没有它的情况下继续。
【解决方案3】:

错误是大多数时候您无法处理的事情。

Exception 是为了让你有机会用它做点什么。喜欢尝试其他方法或写入日志。

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

【讨论】:

    【解决方案4】:

    一般的错误是任何人都无法控制或猜测的。异常是可以猜测和处理的。 Java Exception 和 Error 是 Throwable 的子类。根据程序控制进行区分。OutOfMemory Error 等错误是程序员无法猜测和处理的。它取决于架构、操作系统和服务器配置。其中异常程序员可以处理它并且可以避免应用程序的错误行为。例如,如果您的代码正在寻找一个不可用的文件,则抛出 IOException。这样的实例程序员可以猜测并可以处理它。

    【讨论】:

      猜你喜欢
      • 2022-07-15
      • 2013-04-15
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2015-11-23
      • 2013-02-13
      • 2011-04-26
      相关资源
      最近更新 更多