我知道一般都这么做,但是为什么呢?在finally中关闭资源经常还要再写个try,catch这不是很麻烦吗?请教

解决方案 »

  1.   

    就是为了保证即使之前发生一些异常情况也会最终正常执行finally中的代码,用于保障资源释放等
      

  2.   

    那个文件流什么的,flush是不是也要放finally里面?
      

  3.   

    因为fanally是必执行代码块(除了前面有System.exit(0)外),这样能保证资源被关闭,finally里再写try,catch是怕关闭时发生异常,其实外面还要加多一句if(io != null),保证不为null才关闭,这都增加了代码的安全性。
      

  4.   

    没什么好说的了 只能ding了
      

  5.   

    不管运行时是否出现异常都会执行 finally 所以资源关闭都会写在finally里
      

  6.   

    try{}
    catch(){}
    finally{}
    无论是否抛出异常都会执行finally中的代码,这样是为了防止程序因为异常而意外退出时,一些资源还未关闭,比如conn.close()...等。
      

  7.   

    finally表示不管try里面的代码有没有抛异常,finally里的代码都会执行,这样能防止程序在抛出异常时而你的一些系统资源却没有关闭。finally代码块里面加try catch那是因为finally里面执行的代码也有可能会抛异常。建议楼主看看<Thinking in java>里面异常处理那章,讲的很详细。
      

  8.   

    比如你在try里面打开了一个资源或流,那你就必须在final里面写上关闭的语句,以防止发生异常资源或流无法关闭。
      

  9.   

    如果出现异常确保某些代码必须执行,一般都是释放资源finally{确保执行的代码}
      

  10.   

    finally本身就是有两个作用
    第一个就是在异常被catch之后还能继续执行finally中的代码
    第二个就是释放资源的作用,否则一些流的关闭操作在用异常后都无法执行到,finally的设计还是很巧妙的。
      

  11.   

    flush是关闭缓冲区前。把东西传输完毕后再关闭。和finally不是一个概念。flush常用于流中。
      

  12.   

    写代码 总会出现一些异常吧  为了避免出现Exception 后 程序不能正常运行  因此要在finally 块添加一些 比如 关闭的代码, 不但能释放资源 还可以 避免程序崩溃。
      

  13.   

    因为放在finally内的代码无论try内的代码是否出现异常,都将会执行,这样做对于一些GC不能及时回收的资源可以实现释放,防止内存溢出。
      

  14.   

    我也说几句,在java开发中有很多的业务逻辑,如果你的一个资源打开后,重要的资源 比如数据库连接。开了数量过多 会让你的服务器崩溃的。所以这样的连接使用完之后要及时关掉。但是你知道的。在java中有很多异常。如果那些资源的关闭不放在finally中。会导致关闭的代码没有执行。后果是系统维护。做个广告,我的新群 javaEE菜鸟联盟。有想来的果断加入。
      

  15.   

    由于finally里面的代码不管前面的会不会执行,而finally里面的代码还是会照样执行的,这样就能确保无论如何都会把那资源关闭掉