【问题标题】:Extends Throwable vs Exception in java [duplicate]在java中扩展Throwable vs Exception [重复]
【发布时间】:2014-10-13 10:35:13
【问题描述】:

创建自己的异常时,在决定扩展哪个超类时需要考虑哪些好处?

它们各自的优缺点是什么?

class MyException extends Exception 

class MyException extends Throwable

【问题讨论】:

标签: java


【解决方案1】:

它必须从 Exception 扩展而来,Throwable 必须仅针对 Java 虚拟机错误和严重操作系统错误(如内存堆空间或系统块耗尽)实现。

【讨论】:

    【解决方案2】:

    通过捕获 Throwable,它包含了 Error 子类的东西。您通常不应该这样做,除非在您想要记录或以其他方式绝对处理所有可能出错的线程的最高“catch all”级别。在框架类型应用程序(例如应用程序服务器或测试框架)中更为典型,它可以运行未知代码,并且尽可能不受该代码出错的任何影响。 见difference-between-using-throwable-and-exception-in-a-try-catch

    【讨论】:

    • @USer22999299 询问了 ExceptionThrowable 的子类化问题,而不是捕获它们。
    【解决方案3】:

    第一个捕获 Throwable 的所有子类(包括 Exception 和 Error),第二个捕获 Exception Class 的所有子类。

    错误在任何情况下都无法通过编程方式恢复,就捕获而言应该避免,但日志记录目的除外,这反过来又应该再次抛出它。不应捕获错误,除非您正在尝试某种“捕获所有”级别的线程。

    异常可以通过编程方式恢复。它的子类 RuntimeException 表示一个编程错误,通常也不会被捕获。

    【讨论】:

    • 您可能误读了这个问题。这与捕获异常无关;这是关于创建异常类。
    • 如果您要创建自定义异常,请选择 Exception 而不是 Throwable。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2018-11-20
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2019-07-12
    • 2011-01-08
    相关资源
    最近更新 更多