有 Java 编程相关的问题?

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

最终{}中的java捕获异常?必须

我感到困惑

我用英语写了一个小程序。jsp。最后,需要关闭ResultSetStatementConnection。我也在finally { }中编写结束代码,但是当页面运行时,它返回错误,我没有捕获异常

我读了一些论坛。其他人在finally { }中没有发现任何异常

有什么提示吗


共 (6) 个答案

  1. # 1 楼答案

    也许我已经老了,但是在catch块中捕获异常有什么不对呢

  2. # 2 楼答案

    最后{ 试一试{ 结果集。close(); }捕获(E){ }最后{ 试一试{ 陈述close(); }捕获(E){ }最后{ 康涅狄格州关闭(); } }

    }

  3. # 3 楼答案

    最后,{}不执行任何异常捕获。一个finally{}块的存在是为了确保运行某些代码,不管try{}块是否达到了它的自然结束,或者它是否因为发生了异常而临时跳转到finally{},并且finally{}块正在运行。但是在最后{}结束后,例外会继续它愉快的业务,在堆栈上跳跃,愉快地破坏你的程序

    如果要实际捕获异常并阻止它进一步展开堆栈,请使用catch(){}。但是不要盲目地使用catch——捕获一个你实际上不知道如何从中恢复的异常比崩溃要糟糕得多,因为现在你的程序不能正常工作,并且你没有异常堆栈跟踪告诉你原因

    您的结果集、语句和连接几乎肯定已关闭。然后异常继续发生并导致程序崩溃,因为这与结果集、语句和连接无关

    实际的例外是什么

  4. # 4 楼答案

    您必须捕获代码finally块中的异常。因为您必须捕获catch块中的异常。嵌套的try/catch是一种常规的东西(尽管很难看)

    这里一个重要的注意事项是,您可以在方法的throws子句中声明在finally中发生的异常。但是,这将导致异常最终覆盖丢失的原始异常。例如,您将看到一个NullPointerException,而不是FileNotFoundException

    顺便说一下,避免在JSP文件中包含代码。将其放在servlet中

  5. # 5 楼答案

    如果你说出try块中的内容,这会有所帮助。您可能没有捕获到适当的异常,或者您的代码在finally中抛出异常

    最后没被抓住是可以的

    try {
     //do some work
    }  
    
    finally {
     //check of state and do clean up. You would have reached here via multiple branches. 
    }
    

    更合适的做法是使用catch捕获特定的异常,然后在那里处理特定的清理。对于任何即使发生异常也必须执行的代码,使用finally

    try {
       //do some work
    }  
    catch ( RecoverableException1 re1) {
       //cleanup
    }
    catch ( RecoverableException2 re2) {
       //cleanup
    }
    
    finally {
       //check of state and do clean up. You would have reached here via multiple branches.
    }
    
  6. # 6 楼答案

    听起来您有一个老问题,就是需要在finally块中关闭(),但是close()本身会抛出一个异常。试试下面这样的东西

    ResultSet rs;
    
    try {
        // do various stuff
        rs = ...;
    
    } finally {
        try {
            if (rs != null) rs.close();
    
        } catch (SQLException e) {
            // do something with exception
        } 
    }