关于finally的一些疑问?

pengpenglin 2006-01-14 04:30:19
各位,我有一些关于finally的疑问想请教一下,以下是关于finally的一段程序?
public class ExceptionTest{

public static void main(String args[]){

final int a = 10;
final int b = 0;

try{

System.out.println("The result is: "+(a/b));
}
catch(Exception e1){
e1.printStackTrace();
}
finally{

try{
System.out.println("The result is "+(a/b));
}
catch(Exception e2){
System.out.println("Catch Exception");
}

System.out.println("The result is 0");
}
}
}

我的问题就是:
1.为什么finally块里面在碰到异常之后还会执行:System.out.println("The result is 0");不是应该
在执行catch语句块之后就完成了吗?

2.如果finally语句块里面的东西不管怎么都会被执行到,那么finally里面的异常可不可以不用捕获?

...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghongtaoleifeng 2006-01-14
  • 打赏
  • 举报
回复
在你第二个try/catch语句块里,捕捉到异常之后,只是打印了一下,没有抛出,自然会继续往下执行了。

即使不是放在finally里,一样如此。

我们在处理异常的时候,应该有一些机制,比如第二个try/catch里捕捉到了 就应该抛出去,又方法的调用者进行处理
fxbird 2006-01-14
  • 打赏
  • 举报
回复
catch后面的语句仍然是执行的,就是这样定义的。在finally根据情况了,没有什么硬性规定的。如果是比较重要的操作,如关闭连接,就还要再try一次。不过这不是必须的。
setimouse 2006-01-14
  • 打赏
  • 举报
回复
一般finally语句里通常放入的语句是无论异常与否都要需要执行的操作。

比如在try里面打开了一个文件,那么当遇到异常时,有可能关闭文件的语句在异常语句的后面,这样就无法关闭。所以这样的情况就直接把关闭放在finally里,即不论是否有异常都要执行的操作。
tommy_jk 2006-01-14
  • 打赏
  • 举报
回复
fianlly中的代码不惯与之匹配的try catch是否抛出异常都会执行的,所以肯定会执行到System.out.println("The result is 0");
leeight 2006-01-14
  • 打赏
  • 举报
回复
finally里面的代码和其他的没有什么区别的
就算你将finally的代码拿出了,按照你的写法,还是会System.out.println("The result is 0");

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧