Java常见疑难问题-异常6


26. finally与中断
//该方法返回false
static boolean f() {
try {
return true;
} finally {
return false;
}
}

不要用return、break、continue或throw来退出finally语句块,并且千万不要允许受检查的
异常传播到finally语句块之外。也就是说不要在finally块内终止程序,而是执行完finally
块后,要将控制权移交给try块,由try最终决定怎样结束方法的调用。

对于任何在finally语句块中可能抛出的受检查异常都要进行处理,而不是任其传播,下面
流拷贝程序在关闭流时没有防止异常的传播,这会有问题:
static void copy(String src, String dest) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
byte[] buf = new byte[1024];
int n;
while ((n = in.read(buf)) >= 0) {
out.write(buf, 0, n);
}
} finally{
//这里应该使用try-catch将每个close包装起来
if(in != null){in.close();}
if(in != null){out.close();}
}
}

catch块中的return语句是不会阻止finally块执行的,那么catch块中的continue和break能
否阻止?答案是不会的,与return一样,finally语句块是在循环被跳过(continue)和中断
(break)之前被执行的:
int i = 0;
System.out.println(“–continue–“);
while (i++ <= 1) {
try {
System.out.println(“i=” + i);
continue;
} catch (Exception e) {
} finally {
System.out.println(“finally”);
}
}
System.out.println(“–break–“);
while (i++ <= 3) {
try {
System.out.println(“i=” + i);
break;
} catch (Exception e) {
} finally {
System.out.println(“finally”);
}
}

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java常见疑难问题-异常6
本文地址:http://www.xiupu.net/archives-239.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!