异常和try、catch、finally的简记

时间:2019-12-09 01:01:55   收藏:0   阅读:87

一、异常的简记

  1)Java异常和错误的基类是Throwable(java.lang.Throwable),包括Exception(异常)和Error(错误)。
  2)try和catch不一定需要共存,try是尝试对其中代码捕获异常,catch是捕获异常并且可以处理异常。假如try中有异常抛出,则会去执行catch块,再去执行finally块;假如没有catch块,可以直接执行finally块,方法就以抛出异常的方式结束,而finally 后的内容也不会被执行,所以catch 和 finally 不能同时省略(分别可以单独存在)。
  3)throws和throw
    a)throws:写在方法声明之后,表示方法可能抛出异常,调用者需要处理这个异常。
    b)throw:写在方法体中,表示方法一定会抛出一个异常,要么try...catch处理,要么throws抛出。

 

二、关于try、catch、finally的补充

  关于try-catch里面有return的情况:当程序执行到try{}语句中的return方法时,它会将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序,只要finally那里没有return返回值操作,他都不会去更新临时栈中的那个要返回的值,只是覆盖变量的值而已。执行完之后,就会通知主程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。
  结论:任何执行try或者catch中的return语句之前,如果finally存在的话,都会先执行finally语句。如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

  try-catch-finally的情况分析:
    1)情况1:try{} catch(){}finally{} return;
      按顺序执行-end
    2)情况2:try{ return; }catch(){} finally{} return;
      程序执行try块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,最后执行try中return-->finally块之后的语句return,因为程序在try中已经return所以不再执行。
    3)情况3:try{ } catch(){return;} finally{} return;
      程序先执行try,如果遇到异常执行catch块-->有异常:则执行catch中return之前的代码(包括return语句中的表达式运算)-->再执行finally语句中全部代码--》最后执行catch块中return-->finally之后的代码不再执行-->无异常:执行完try再finally再return.
    4)情况4:try{ return; }catch(){} finally{return;}
      程序执行try块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,因为finally块中有return所以提前退出。
    5)情况5:try{} catch(){return;}finally{return;}
      程序执行catch块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,因为finally块中有return所以提前退出。
    6)try{ return;}catch(){return;} finally{return;}
      程序执行try块中return之前的代(包括return语句中的表达式运算)-->有异常:执行catch块中return之前的代(包括return语句中的表达式运算)-->则再执行finally块,因为finally块中有return所以提前退出-->无异常:则再执行finally块,因为finally块中有return所以提前退出。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!