黑马程序员技术交流社区
标题:
IO异常问题
[打印本页]
作者:
funneies
时间:
2013-8-21 13:18
标题:
IO异常问题
IO异常处理,如果在finally处理bufos.close()和在try块里处理bufos.close()有什么区别呢?
public static void copy_1(){
BufferedInputStream bufis = null;
BufferedOutputStream bufos = null;
try {
bufis = new BufferedInputStream(new FileInputStream("D:\\test\\1.mp3"));
bufos = new BufferedOutputStream(new FileOutputStream("D:\\test\\11.mp3"));
int by = 0;
while((by=bufis.read())!=-1){
bufos.write(by);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(bufos!=null)
bufos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(bufis!=null)
bufis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
复制代码
作者:
白堇翎
时间:
2013-8-21 13:26
首先你要明白java的异常处理机制.
1.如果在try语句块的第1行抛出了一个异常,那么程序是不会往下继续执行,而是跳转到catch语句块(假如这个异常是被catch声明可以捕获的)
结合你的实际情况
假如把.close()写在try语句块中,那么只要这一行前面的任意一行抛出了一个异常,.close()这一行就不会被执行到了.
而写在finally中,无论如何都会被执行到(当然 如果你要关2个流的话 需要对每个流的.close()进行单独的try catch).
作者:
★忙碌★
时间:
2013-8-21 17:16
finally是无论发不发生异常都会执行到,try里的语句,只要有一句异常,都不会再往下执行,会跳转到catch里面
作者:
徐鹏跃
时间:
2013-11-21 11:27
为了报复系统资源能够被释放,java提供了finally方法,即使是出现了异常 finally中的代码也会执行的
如果在try块中执行close方法,但是在close方法执行之前跑出了异常 ,这个close方法是不会执行的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2