书上说:
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。 
而我想问:
finally既然是用来释放资源的(在出现异常以后),如果代码正确执行那finally就不能够再执行释放资源的代码了,而是要继续。但是事实上finally总是被执行的,这就出现了一个问题,如果代码被正确执行,并没有出现异常,在finally块当中却把需要的资源释放了,这不就错了吗?
请最好给一个例子,先谢谢了。

解决方案 »

  1.   

    所以要放到程序最后吗,如struts中action的使用
      

  2.   

    你的理解有点问题, finally是不管程序运行正确与否都执行的操作。 而不是在错误时运行。 如果你的资源在程序出错时释放,但是在正常运行下不释放的话, 释放字源的代码应该放在catch块中。 而不是放在finally块中。比如 我有个方法a 其中用到了数据库的连接。 这样不管这个方法运行成功与否在方法执行完后我都要关闭连接,释放资源。public void a() {
      try {
        //执行业务逻辑
      } catch(SQLException se) {
        //异常处理
      } finally {
        closeConnection(conn); //释放数据库连接
      }
    }
      

  3.   

    Java_caicainiao(Java菜鸟):我明白你的意思了,谢谢你。我马上给分。不过前面的那个throw我还是有点疑问。你能再回去看看吗?