本来课程学习中对异常处理机制学的不深,结果今天做CVTE校招在线测评的时候,遇见了两道这样的题(一道打头第一题,一道押尾倒数第二道),好忧桑啊。。
那么亡羊补牢,总结下好了~
1. 异常处理块
1 try{ 2 //可能产生异常的语句 3 }catch(Exception1 e){ 4 //出现异常Excertion1时的处理语句 5 }catch(Exception2 e){ 6 //出现异常Excertion2时的处理语句 7 }finally{ 8 //无论如何均会执行的语句(一般用于释放一些资源等) 9 }10 //期间异常Exception1不能是Exception2的基类,Exception1可为Exception2的子类
1 public void method() throws Exception1{2 //在方法名后直接抛出异常Exception13 }
方式一(捕获异常)try-catch可以嵌套使用构成嵌套try-catch块;
方式二(抛出异常)可以抛出多个异常,即throws后可以添加一个异常列表,异常名之间用逗号分隔。
PS:printStackTrace()方法用来跟踪异常事件发生时打印堆栈中的信息(Throwable对象)
2. finally子句
在任何情况下,finally块中的语句均会执行,无论try块中是否出现异常或者是否捕获了异常;
finally子句通常用于I/O编程,可在finally块中放置一条文件关闭语句。
PS:1)若try块中没有出现异常,finally块中语句被执行,然后跳出异常处理块执行下一条语句;
2)若try块中有一个语句出现异常,并被catch块捕获,此时跳过try块中其他语句直接执行catch块和finally子句;
3)若try块中有一个语句出现异常,但是没有被任何catch块捕获,则会跳过try块中其他语句直接执行finally子句;
4)即使在到达finally块之前有return语句,finally块仍然会执行,但是finally子句执行前,已经完成了return后表达式返回值的运算(并保存起来),顺序如下:
try语句(return之前的代码部分)---计算return需要返回的值---finally---执行try中的 return语句
(含有return的执行顺序总结,详细可参看 “3Q啦博主,小女子在此谢过~”)