8

如果执行没有导致异常,则控制转到 finally 块。那么JVM是否忽略了try块中的return语句?. 或者,如果发生异常,则控制转到 catch 块,它也忽略返回语句和控制转到 finally 块并从 finally 返回

  public class Helper {
     public int showException(int a, int b){

           try{
           int c=a/b;
           return c;
           } catch(Exception e){
                return 0;
           } finally{
               return 3;
             }
     }
  }
4

5 回答 5

4

因为无论您输入还是finally输入,每次都会执行块,我认为这就是为什么它最终被调用:)trycatch

来自JAVA 文档

finally 块总是在 try 块退出时执行。这样可以确保即使发生意外异常也会执行 finally 块。

注意:只有在

如果在执行 try 或 catch 代码时 JVM 退出,则 finally 块可能不会执行。同样,如果执行 try 或 catch 代码的线程被中断或杀死,即使应用程序作为一个整体继续运行,finally 块也可能不会执行。

于 2013-03-25T14:09:57.210 回答
2

按照设计,finally块中的返回总是优先的。

于 2013-03-25T14:09:59.387 回答
0

finally 块总是执行无论 try catch 块是否执行

于 2013-03-25T14:11:40.160 回答
0

finally 块总是在 try 块退出时执行。这样可以确保即使发生意外异常也会执行 finally 块。但 finally 不仅仅对异常处理有用——它允许程序员避免清理代码意外地被 return、continue 或 break 绕过。将清理代码放在 finally 块中始终是一个好习惯,即使没有预料到异常也是如此。

在这里阅读更多

于 2013-03-25T14:12:46.543 回答
-1

不管 catch 块是否被调用,finally 都会被最后调用。也许您想阅读更多文档。 MSDN 最后尝试 Catch

于 2013-03-25T14:09:58.493 回答