【问题标题】:Do we need to throw the same exception in catch block which is already mentioned in method signature using throws declaration我们是否需要在使用 throws 声明的方法签名中已经提到的 catch 块中抛出相同的异常
【发布时间】:2015-10-01 07:53:06
【问题描述】:

我的 Java 应用程序中有一个方法抛出 SQLException。是否需要在catch块中抛出SQLException,以便将异常抛给处理异常的调用方法?

public void insert(Connection conn) throws SQLException
{
    try {
        // my code
    } catch (SQLException s) {
        throw s;
    }
}

【问题讨论】:

  • 如果你根本抓不到它,正如throws中已经提到的那样

标签: java exception throw throws


【解决方案1】:

如果您想自己处理异常,然后将其传递给调用方法,那么是的,您需要重新抛出它:

public void insert(Connection conn) throws SQLException {
    try {
        // Your code.
    } catch (SQLException s) {
        // Handle s.
        throw s;
    }
}

如果您不需要对异常执行任何操作而只想将其传递给调用方法,那么您可以省略try-catch,如果抛出异常,调用方法将接收它:

public void insert(Connection conn) throws SQLException {
    // Your code.
}

【讨论】:

  • 我正在处理调用方法中的异常。所以在 catch 块中我需要重新抛出异常对吗?
  • 仅当您希望调用方法也处理它时。如果你不这样做,那么你不需要重新抛出它,并且可能不需要throws SQLException
【解决方案2】:

发生错误是因为您将代码放在“try-catch”块中,如果发生任何异常,catch 块句柄将与它一起处理。不发送到调用方法。

您可以使用下面的函数将异常抛出给调用方法

public void insert(Connection conn) throws SQLException {
    //code.
}

【讨论】:

    【解决方案3】:

    如果你在方法的 throws 子句中声明异常,那么你可以:
    1) 抛出声明类型的异常。
    2) 抛出声明类型的子类型异常。
    3) 吞下异常。 (不推荐,因为您已在签名中声明)
    4) 抛出任何其他运行时异常。

    现在来看您的示例,最好重新抛出异常,以便调用者方法知道发生了错误并采取适当的措施(例如,如果事务正在 Connection 对象上运行,则回滚事务)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2021-04-20
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多