我很确定之前有效,但是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();
答案 0 :(得分:6)
据推测,您的方法是声明以抛出UnsupportedAddressTypeException
但不是SQLException
和ClassNotFoundException
。只能从声明它们抛出这些异常或超类的方法抛出已检查的异常(包括重新抛出现有的异常)。
答案 1 :(得分:0)
包含此代码块的方法需要声明“抛出异常”
该方法要么需要处理异常本身,要么向其他调用方法发出信号它可以抛出异常并且应该处理它。
处理它的另一种方法是将“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将负责它。