为什么把关闭资源放finally中? 我知道一般都这么做,但是为什么呢?在finally中关闭资源经常还要再写个try,catch这不是很麻烦吗?请教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是为了保证即使之前发生一些异常情况也会最终正常执行finally中的代码,用于保障资源释放等 那个文件流什么的,flush是不是也要放finally里面? 因为fanally是必执行代码块(除了前面有System.exit(0)外),这样能保证资源被关闭,finally里再写try,catch是怕关闭时发生异常,其实外面还要加多一句if(io != null),保证不为null才关闭,这都增加了代码的安全性。 没什么好说的了 只能ding了 不管运行时是否出现异常都会执行 finally 所以资源关闭都会写在finally里 try{}catch(){}finally{}无论是否抛出异常都会执行finally中的代码,这样是为了防止程序因为异常而意外退出时,一些资源还未关闭,比如conn.close()...等。 finally表示不管try里面的代码有没有抛异常,finally里的代码都会执行,这样能防止程序在抛出异常时而你的一些系统资源却没有关闭。finally代码块里面加try catch那是因为finally里面执行的代码也有可能会抛异常。建议楼主看看<Thinking in java>里面异常处理那章,讲的很详细。 比如你在try里面打开了一个资源或流,那你就必须在final里面写上关闭的语句,以防止发生异常资源或流无法关闭。 如果出现异常确保某些代码必须执行,一般都是释放资源finally{确保执行的代码} finally本身就是有两个作用第一个就是在异常被catch之后还能继续执行finally中的代码第二个就是释放资源的作用,否则一些流的关闭操作在用异常后都无法执行到,finally的设计还是很巧妙的。 flush是关闭缓冲区前。把东西传输完毕后再关闭。和finally不是一个概念。flush常用于流中。 写代码 总会出现一些异常吧 为了避免出现Exception 后 程序不能正常运行 因此要在finally 块添加一些 比如 关闭的代码, 不但能释放资源 还可以 避免程序崩溃。 因为放在finally内的代码无论try内的代码是否出现异常,都将会执行,这样做对于一些GC不能及时回收的资源可以实现释放,防止内存溢出。 我也说几句,在java开发中有很多的业务逻辑,如果你的一个资源打开后,重要的资源 比如数据库连接。开了数量过多 会让你的服务器崩溃的。所以这样的连接使用完之后要及时关掉。但是你知道的。在java中有很多异常。如果那些资源的关闭不放在finally中。会导致关闭的代码没有执行。后果是系统维护。做个广告,我的新群 javaEE菜鸟联盟。有想来的果断加入。 由于finally里面的代码不管前面的会不会执行,而finally里面的代码还是会照样执行的,这样就能确保无论如何都会把那资源关闭掉 java DOM XML appendChild没用啊 unix 上安装java的问题 发布一个用SWT/JFace实现的开源小项目jZoomer放大镜/取色软件,寻求其下一步发展的建设性意见 有什么资料学习java socket比较好? javac 时的 -sourcepath,它有什么用处? 如何对list中每个对象修改? 能不能先确定数组维数,再定义数组 why my package can't find? 最近较忙,没空来,今天来散点分。 一个错误 线程同步synchronized在程序里出现多个哪个先运行? 为什么dao要用接口实现
catch(){}
finally{}
无论是否抛出异常都会执行finally中的代码,这样是为了防止程序因为异常而意外退出时,一些资源还未关闭,比如conn.close()...等。
第一个就是在异常被catch之后还能继续执行finally中的代码
第二个就是释放资源的作用,否则一些流的关闭操作在用异常后都无法执行到,finally的设计还是很巧妙的。