【问题标题】:java throwing checked exceptions?java抛出检查异常?
【发布时间】:2011-11-17 15:05:40
【问题描述】:

我很确定这在以前有效,但是 eclipse 说它在 throw 行中有错误。

 try{}
}catch(Exception e){
    throw e;    }

在我以前的学生项目中,我写道:

 try {
        Class.forName("org.postgresql.Driver");
        this.connection = DriverManager.getConnection(
                DataSource.getURL(), DataSource.getUserName(), DataSource.getPassword());
    } catch (ClassNotFoundException e) {
        System.out.println("Could not find driver to connect to database. Please make"
                + "sure the correseponding postgreSQLjdbc library is added.");
        throw e;

    } catch (SQLException e) {
        System.out.println("Username or password is not correct");
        throw e;
    }

这是完美的。

只有这种类型有效,但不是我想要的

 throw new UnsupportedAddressTypeException();

【问题讨论】:

    标签: java exception


    【解决方案1】:

    大概你的方法声明抛出UnsupportedAddressTypeException而不是SQLExceptionClassNotFoundException。已检查的异常只能从声明它们抛出这些异常或超类的方法中抛出(包括重新抛出现有的异常)。

    【讨论】:

    • @Aubergine - 一直都是这样。方法声明它抛出/传播的检查异常的要求从 Java 1.0 开始就存在了,而且可能更早。你也可能要疯了:-)
    • 我很感激! :-) 喝咖啡休息时间。
    【解决方案2】:

    eclipse 说它是一个错误,因为:

    包含此代码块的方法需要声明“抛出异常”

    该方法要么需要自己处理异常,要么向其他调用方法发出信号,它可以抛出异常并且它们应该处理它。

    另一种处理方法是将“throw e”包含在另一个 try/catch 块中(处理异常的方法本身)。

    您的 uni 代码有效,因为具有这些语句的方法必须声明为:

    方法 x() 抛出 ClassNotFoundException, SQLException

    【讨论】:

      【解决方案3】:

      如果没有详细说明您正在做什么的其他信息,我能给您提供的唯一通用解决方案是重新抛出您的异常,该异常包含在未经检查的 RuntimeException 中。

      您包含的代码重新抛出异常,这是一个已检查的异常。除非这个方法被声明为“抛出异常”,否则这不可能在任何 Java 版本中工作。

      另一方面,永远不要记录并重新抛出。做一个或另一个。所以你的项目代码应该是这样的:

       ....
      
           } catch (SQLException e) {
              throw RuntimeException("Username or password is not correct", e);
          }
      

      【讨论】:

        【解决方案4】:

        ClassNotFoundException 或 SQLException 是检查异常。所以应该在它们被抛出时以某种方式处理(即使手动使用'throw'关键字)。

        有两种方法可以处理已检查的异常: 1. 在 try-catch 块中包围可能抛出检查异常的代码。 2. 在编写特定代码的方法定义之后添加 throws 子句。

        现在,当您“抛出 e”时,其中 e 是 ClassNotFoundException 或 SQLException 的一个实例,它必须以上述两种方式中的任何一种来处理。

        但是,UnsupportedAddressTypeException 是未经检查的异常。所以你不需要明确地处理它。你可以把它扔到任何地方,Java 会处理它。

        【讨论】:

          猜你喜欢
          • 2011-09-21
          • 1970-01-01
          • 1970-01-01
          • 2016-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 1970-01-01
          相关资源
          最近更新 更多