[英]java throwing checked exceptions?
我很确定这在以前是可行的,但是日食说它在投掷线中有错误。
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();
假定您的方法声明为引发UnsupportedAddressTypeException
但不会引发SQLException
和ClassNotFoundException
。 只能从声明已抛出异常或超类的方法中抛出已检查异常(包括重新抛出现有异常)。
eclipse说它是错误的,因为:
包含此代码块的方法需要声明“ throws Exception”
该方法要么需要处理异常本身,要么向其他调用方法发出信号,告知它可以引发异常,并且应该处理该异常。
处理它的另一种方法是将“ throw e”包含在另一个try / catch块中(处理异常本身的方法)。
您的uni代码起作用了,因为具有这些语句的方法必须声明为:
方法x()抛出ClassNotFoundException,SQLException
如果没有其他信息来说明您到底在做什么,我唯一可以给您的一般解决方案是将异常包装在未经检查的RuntimeException中。
您包含的代码将引发Exception,这是一个已检查的异常。 除非使用“ throws Exception”声明包含的方法,否则该方法不能在任何Java版本中使用。
另一方面,请勿登录并重新抛出。 做一个或另一个。 因此,您的项目代码应如下所示:
....
} catch (SQLException e) {
throw RuntimeException("Username or password is not correct", e);
}
ClassNotFoundException或SQLException是检查的异常。 所以应该在抛出它们时以某种方式处理(即使使用'throw'关键字手动)。
有两种方法来处理已检查的异常:1.将可能引发已检查的异常的代码括在try-catch块中。 2.在编写特定代码的方法定义之后添加throws子句。
现在,在这里当您“抛出e”(其中e是ClassNotFoundException或SQLException的实例)时,必须以上述两种方式之一对其进行处理。
但是,UnsupportedAddressTypeException是未经检查的异常。 因此,您无需显式处理它。 您可以将其扔到任何地方,Java会照顾好它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.