【问题标题】:Java method throwing exceptionJava方法抛出异常
【发布时间】:2014-11-12 09:33:44
【问题描述】:

我有一个 java 方法,它可以抛出多个未经检查的异常。我的问题是:我需要声明它以抛出所有异常吗?或者如果我只声明throws Exception 有什么问题吗?

方法一:

public void myMethod() throws Exception1,Exception2,Exception3,Exception4,Exception5
{}

代替方法1,我可以这样声明吗?

public void myMethod() throws Exception
{}

【问题讨论】:

  • 如果你的方法只抛出 unchecked exceptions,你不需要任何 throws 子句。

标签: java exception-handling


【解决方案1】:

是的,您可以,但理想情况下人们会选择特定类型的异常,以便您知道该代码块具有哪种类型的“异常”行为。例外是超类 - 其他的是子类。如果您有未经检查的异常,即您的代码的行为可以归类为“未经检查的”异常行为,您可以使用Exceptions 类。但否则你需要上面提到的Checkedones(可能不是全部)。

如果您不了解不同类型的异常有何作用 - 请尝试阅读此内容 - https://docs.oracle.com/javase/tutorial/essential/exceptions/

这将解释不同的异常以及如何在您的应用程序中使用它们:)

附:对于未经检查的异常,NOT 需要在您的方法签名中使用throws - 但使用它可能不会造成任何伤害 - 至少您让人们知道您有“An”异常这可能会被这段代码抛出:) [我很高兴因此受到批评]

【讨论】:

    【解决方案2】:

    是的,你可以定义。但是,方法调用者会丢失一些关于抛出异常的信息。最佳做法是抛出特定异常并专门处理它们。

    【讨论】:

    • +1,同时捕捉也适用相同的原则。永远不要直接看到Exception,这是所有异常中的超级。始终捕获特定的子类异常。
    【解决方案3】:

    您总是可以抛出根异常。如果您的 Exception1,Exception2,,Exception3,Exception4,Exception5 都在其遗产树的某处扩展了相同的异常,您可以抛出此基本异常。

    请注意,异常可能具有含义,即显示可能出现的问题(并给出处理提示)。如果其他开发人员必须处理您的方法,这一点尤其重要。

    【讨论】:

      【解决方案4】:

      如果异常来自另一个功能区域或不在您的控制范围内,我会处理它们(通过记录、回滚、清理资源等)并将它们包装在我自己的 (Java: checked vs unchecked exception explanation) 中并抛出它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 2021-05-04
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多