java - 异常和E之间的差异
我正在尝试更多地了解基本Java和不同类型的Throwables,有人能告诉我异常和错误之间的区别吗?
10个解决方案
149 votes
不应该捕获或处理错误(除了最罕见的情况)。 例外是异常处理的基础。 Javadoc解释得很好:
错误是Throwable的子类,表示a的严重问题 合理的应用不应该试图抓住。 大多数此类错误都是异常的 条件。
查看FileNotFoundException的一些子类,获取他们的一些JavaDoc注释:
FileNotFoundException - 注释解析器尝试从类文件中读取注释并确定注释格式错误时抛出。
FileNotFoundException - 抛出以指示断言失败。
FileNotFoundException - LinkageError的子类表明一个类对另一个类有一些依赖性; 然而,后一类在前一类的编译后发生了不相同的变化。
FileNotFoundException - 抛出此异常表示Java虚拟机已损坏或已耗尽其继续运行所需的资源。
FileNotFoundException确实有三个重要的子类别:
FileNotFoundException - 大多数应用程序都应该崩溃而不是试图解决问题,这已经出了问题,
未经检查的异常(又名FileNotFoundException) - 通常是编程错误,例如TimeoutException或非法参数。 应用程序有时可以处理或从此Throwable类别中恢复 - 或者至少在Thread的run()方法中捕获它,记录投诉并继续运行。
检查异常(又名其他) - 应用程序应该能够捕获并有意义地执行其余操作,例如FileNotFoundException和TimeoutException ...
Eddie answered 2019-05-13T17:02:13Z
24 votes
这张幻灯片显示了@ georgios-gousios的Java异常层次结构,简要地解释了Java中的错误和异常之间的区别。
avandeursen answered 2019-05-13T17:02:39Z
17 votes
如您所知,错误往往表示您的应用程序已结束。 它通常无法从中恢复,并且应该导致VM退出。 除了在退出之前可能记录或显示和适当的消息之外,不应该捕获它们。
例:OutOfMemoryError - 您无法再执行任何程序,因为您的程序无法运行。
例外通常是可以恢复的,即使没有,它们通常只是意味着尝试的操作失败,但您的程序仍然可以继续。
例:IllegalArgumentException - 将无效数据传递给方法,以便方法调用失败,但不会影响将来的操作。
这些都是简单的例子,仅有例外情况就有另外丰富的信息。
Robin answered 2019-05-13T17:03:33Z
7 votes
Sun说得最好:
Error是Throwable的子类 这表明存在严重的问题 合理的申请不应该尝试 去抓。
Powerlord answered 2019-05-13T17:04:05Z
4 votes
错误 -
java中的SQLExceptions是类型IOException。
java中的所有错误都是未选中的类型。
SQLExceptions在运行时发生。 编译器不会知道它们。
从错误中恢复是不可能的。
SQLExceptions主要是由运行应用程序的环境引起的。
示例:SQLException,23454747391347655681
例外 -
java中的SQLExceptions是类型IOException。
SQLExceptions包括已选中和未选中的类型。
编译器知道已检查的异常,因为编译器不知道未经检查的异常,因为它们在运行时发生。
您可以通过SQLException块处理它们来从异常中恢复。
SQLExceptions主要由应用程序本身引起。
示例:已检查的例外:SQLException,23454747391347655681
未经检查的例外:ArrayIndexOutOfBoundException,23454747391347655683,23454747391367655684
进一步阅读:[http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/]
roottraveller answered 2019-05-13T17:06:16Z
3 votes
Exception类的描述非常清楚:
Exception是Throwable的子类 这表明存在严重的问题 合理的申请不应该尝试 去抓。 大多数此类错误都是 异常情况。 ThreadDeath 错误,虽然是“正常”的条件,但是 也是Error的子类,因为大多数 应用程序不应该尝试捕获 它。
声明不需要方法 它的throws子句的任何子类 Exception可能会被抛出 执行方法但不是 抓住了,因为这些错误是 不应该的异常情况 发生。
引自Java自己的类Exception的文档。
简而言之,你不应该抓住Exceptions,除非你有充分的理由这样做。 (例如,如果servlet耗尽内存或类似内容,则防止Web服务器的实现崩溃。)
另一方面,Exception与任何其他现代语言一样,只是一个普通的例外。 您可以在Java API文档或任何在线或离线资源中找到详细说明。
Tobias Müller answered 2019-05-13T17:07:22Z
2 votes
类java.lang.Error和java.lang.Exception之间存在若干相似点和不同点。
相似点:
首先 - 两个类都扩展到java.lang.Error,结果继承了许多在交易时常用的方法错误如:java.lang.Exception,234550682383123458,234550682383123459和等等。
其次,作为java.lang.Error的子类,它们都继承以下属性:
可以使用java.lang.Exception关键字在方法例外列表中声明Throwable本身及其任何子类(包括java.lang.Error)。 此类声明仅适用于java.lang.Error和子类,对于java.lang.Exception,234550682383123460和java.lang.RuntimeException及其子类,它是可选的。
只有java.lang.Error和子类允许在java.lang.Exception子句中使用。
只有java.lang.Error和子类可以与关键字一起使用 - java.lang.Exception。
从这个属性得出的结论是java.lang.Error和java.lang.Exception都可以在方法头中声明,可以在java.lang.Error子句中,可以使用关键字java.lang.Exception。
区别:
第一 - 概念上的差异:java.lang.Error旨在由JVM引发并指出严重问题并打算停止程序执行而不是被捕获(但有可能任何其他java.lang.Exception接班人)。
关于java.lang.Error的javadoc描述的一段:
......表示合理应用应该存在的严重问题 不要试图抓住。
在对应的java.lang.Error中设计用于表示错误预期并且可以由程序员处理而不会终止程序执行。
关于java.lang.Error的javadoc描述的一段:
...表示合理的应用程序可能想要的条件 抓住。
java.lang.Error和java.lang.Exception之间的第二个区别,它首先被认为是编译时异常检查的未经检查的异常。 结果代码抛出java.lang.Error或其子类不需要在方法头中声明此错误。 在方法标题中抛出java.lang.Exception所需的声明。
Throwable及其后继类图(省略了属性和方法)。
Mikhailov Valentine answered 2019-05-13T17:09:31Z
1 votes
IMO错误是导致应用程序失败并且不应该处理的错误。 异常会导致不可预测的结果,但可以从中恢复。
例:
如果程序内存不足,则会出现错误,因为应用程序无法继续运行。 但是,如果程序接受不正确的输入类型,则它是一个例外,因为程序可以处理它并重定向以接收正确的输入类型。
Mr. Will answered 2019-05-13T17:10:11Z
0 votes
以下是Java API的一个非常好的总结,错误和异常代表什么:
Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。 大多数此类错误都是异常情况。 ThreadDeath错误,虽然是“正常”条件,但也是Error的子类,因为大多数应用程序不应该尝试捕获它。
声明不需要方法 它的throws子句的任何子类 在期间可能抛出的错误 执行方法但不是 抓住了,因为这些错误是 不应该的异常情况 发生。
OTOH,对于Exceptions,Java API说:
类Exception及其子类是Throwable的一种形式,它表示合理的应用程序可能想要捕获的条件。
egaga answered 2019-05-13T17:11:11Z
0 votes
错误主要是由运行应用程序的环境引起的。 例如,当JVM内存不足时发生OutOfMemoryError,或者当堆栈溢出时发生StackOverflowError。
例外主要是由应用程序本身引起的。 例如,当应用程序尝试访问null对象时发生NullPointerException,或者当应用程序尝试强制转换不兼容的类类型时发生ClassCastException。
来源:Java中的错误和异常之间的差异
user2485429 answered 2019-05-13T17:11:54Z