标签:err 处理异常 nal 主程序 return语句 return 调用 lang 没有
一、异常的简记
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所以提前退出。
标签:err 处理异常 nal 主程序 return语句 return 调用 lang 没有
原文地址:https://www.cnblogs.com/yangrongkuan/p/12008534.html