各位,我有一些关于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里面的异常可不可以不用捕获?
  

解决方案 »

  1.   

    finally里面的代码和其他的没有什么区别的
    就算你将finally的代码拿出了,按照你的写法,还是会System.out.println("The result is 0");
      

  2.   

    fianlly中的代码不惯与之匹配的try catch是否抛出异常都会执行的,所以肯定会执行到System.out.println("The result is 0");
      

  3.   

    一般finally语句里通常放入的语句是无论异常与否都要需要执行的操作。比如在try里面打开了一个文件,那么当遇到异常时,有可能关闭文件的语句在异常语句的后面,这样就无法关闭。所以这样的情况就直接把关闭放在finally里,即不论是否有异常都要执行的操作。
      

  4.   

    catch后面的语句仍然是执行的,就是这样定义的。在finally根据情况了,没有什么硬性规定的。如果是比较重要的操作,如关闭连接,就还要再try一次。不过这不是必须的。
      

  5.   

    在你第二个try/catch语句块里,捕捉到异常之后,只是打印了一下,没有抛出,自然会继续往下执行了。即使不是放在finally里,一样如此。我们在处理异常的时候,应该有一些机制,比如第二个try/catch里捕捉到了 就应该抛出去,又方法的调用者进行处理