繁体   English   中英

java抛出检查异常?

[英]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但不会引发SQLExceptionClassNotFoundException 只能从声明已抛出异常或超类的方法中抛出已检查异常(包括重新抛出现有异常)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM