有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java抛出检查过的异常?

我很确定这以前是有效的,但是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) 个答案

  1. # 1 楼答案

    eclipse表示这是一个错误,因为:

    包含这段代码的方法需要声明“throws Exception”

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

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

    uni代码之所以有效,是因为包含这些语句的方法必须声明为:

    方法x()抛出ClassNotFoundException、SQLException

  2. # 2 楼答案

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

  3. # 3 楼答案

    如果没有关于具体操作细节的额外信息,我能给你的唯一通用解决方案就是用一个未经检查的RuntimeException重新包装异常

    您包含的代码返回异常,这是一个选中的异常。除非incide的方法声明为“throws Exception”,否则在任何Java版本中都不可能工作

    另一方面,永远不要记录和重播。要么这样,要么那样。所以你的项目代码应该是这样的:

     ....
    
         } catch (SQLException e) {
            throw RuntimeException("Username or password is not correct", e);
        }
    
  4. # 4 楼答案

    ClassNotFoundException或SQLException是选中的异常。因此,无论何时抛出,都应该以某种方式处理它们(即使手动使用“throw”关键字)

    有两种方法可以处理选中的异常: 1.将可能在try-catch块中引发选中异常的代码包围起来。 2.在编写特定代码的方法定义之后添加throws子句

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

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