java抛出检查异常?

时间:2011-11-17 06:32:01

标签: java exception

我很确定之前有效,但是eclipse说投掷线上有错误。

 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();

4 个答案:

答案 0 :(得分:6)

据推测,您的方法是声明以抛出UnsupportedAddressTypeException但不是SQLExceptionClassNotFoundException。只能从声明它们抛出这些异常或超类的方法抛出已检查的异常(包括重新抛出现有的异常)。

答案 1 :(得分:0)

eclipse说错误是因为:

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

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

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

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

方法x()抛出ClassNotFoundException,SQLException

答案 2 :(得分:0)

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

您包含的代码会重新抛出异常,这是一个经过检查的异常。除非使用"声明异常"这可能不适用于任何Java版本。

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

 ....

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

答案 3 :(得分:0)

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

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

现在,当你'抛出e',其中e是ClassNotFoundException或SQLException的一个实例时,必须以上述两种方式之一处理它。

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