Java 没有catch或finally块的嵌套try块

Java 没有catch或finally块的嵌套try块,java,try-catch,Java,Try Catch,如果嵌套的try块中没有catch或finally块,则让外部catch块处理嵌套try块中的异常(如果有),这样可以吗 比如: try (Connection con = ds.getConnection(); PreparedStatement ps = con.prepareStatement(sql);) { //nested try block without a catch or finally block try (ResultSet rs = ps.e

如果嵌套的try块中没有catch或finally块,则让外部catch块处理嵌套try块中的异常(如果有),这样可以吗

比如:

try (Connection con = ds.getConnection();
     PreparedStatement ps = con.prepareStatement(sql);) {

    //nested try block without a catch or finally block
    try (ResultSet rs = ps.executeQuery();) {
        while (rs.next()) {
            list.add(rs.getInt("id"));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

如果删除“尝试”,结果集将不会自动关闭

try with resources语句排序在一个隐藏的finally中执行rs.close

关闭resultset是一种很好的做法,打开resultset可能会导致以下问题:


本例中异常捕获的问题是如何区分数据源异常、查询创建异常或查询执行异常?当我的数据源无法提供连接时,我可能会抛出一个特定的RuntimeException

如果删除“尝试”,结果集将不会自动关闭

try with resources语句排序在一个隐藏的finally中执行rs.close

关闭resultset是一种很好的做法,打开resultset可能会导致以下问题:


本例中异常捕获的问题是如何区分数据源异常、查询创建异常或查询执行异常?当我的数据源无法提供连接时,我可能会抛出一个特定的RuntimeException

否。您的代码无法编译。

每个
try
块(甚至嵌套)后面必须跟有
catch(..)
和/或
finally

在您的情况下,如果您想处理任何其他异常,请添加第二个catch块

示例代码:

try {
    // code which may throw exceptions
} catch(Exception e1) {
    // e1 specific code
} catch (Exception e2) {
    // e2 specific code
} finally {
   // Optional. Executes whether exception thrown or not!
}

否。您的代码无法编译。

每个
try
块(甚至嵌套)后面必须跟有
catch(..)
和/或
finally

在您的情况下,如果您想处理任何其他异常,请添加第二个catch块

示例代码:

try {
    // code which may throw exceptions
} catch(Exception e1) {
    // e1 specific code
} catch (Exception e2) {
    // e2 specific code
} finally {
   // Optional. Executes whether exception thrown or not!
}

它在JDK 7中编译得很好它在JDK中编译得很好7@sr.Varoa我这里的问题与它是否编译无关。它确实可以编译。我的问题是,遵循不为嵌套的try块声明catch块的编程实践可以吗。尽管采用这种方法,程序编译和运行良好。@sr.Varoa我这里的问题与它是否编译无关。它确实可以编译。我的问题是,遵循不为嵌套的try块声明catch块的编程实践可以吗。尽管采用这种方法,程序编译和运行良好。