美文网首页
try、catch、finally执行的顺序和逻辑

try、catch、finally执行的顺序和逻辑

作者: 3f33f6b95f47 | 来源:发表于2017-11-17 10:06 被阅读0次

    除非在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);),否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总是会被执行的。不过,一般情况下,不要再finally块中使用return或throw等导致方法终止的语句,因为一旦使用,将会导致try块、catch块中的return、throw语句失效。

    总结一下这个小问题:

    当程序执行try块,catch块时遇到return语句或者throw语句,这两个语句都会导致该方法立即结束,所以系统并不会立即执行这两个语句,而是 去寻找该异常处理流程中的finally块,如果没有finally块,程序立即执行return语句或者throw语句,方法终止。如果有 finally块,系统立即开始执行finally块,只有当finally块执行完成后,系统才会再次跳回来执行try块、catch块里的 return或throw语句,如果finally块里也使用了return或throw等导致方法终止的语句,则finally块已经终止了方法,不用 再跳回去执行try块、catch块里的任何代码了。

    综上:尽量避免在finally块里使用return或throw等导致方法终止的语句,否则可能出现一些很奇怪的情况!

    使用throws抛出异常的思路是:当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用使用throws声明抛出异常,该异常将交给JVM来处理。

    JVM对异常的处理方法:打印异常跟踪栈的信息,并终止程序运行,所以有很多程序遇到异常后自动结束

    举例说明:

    publicclassTest{

    publicstaticinttestFinally(){

    try{

    return1;

    }catch(Exception e) {

    return0;

    }finally{

    System.out.println("execute finally");

    }

    }

    publicstaticvoidmain(String[] args){

    intresult = testFinally();

    System.out.println(result);

    }

    }

    执行结果:

    execute finally

    1

    相关文章

      网友评论

          本文标题:try、catch、finally执行的顺序和逻辑

          本文链接:https://www.haomeiwen.com/subject/zuvdvxtx.html