使用背景:无论异常是否存在或是否被捕获,都希望执行某些代码;
语法:
try{ statements1;
statements2;
statements3;
}
catch(TheException ex){
handing ex;
}
finally{
statements4;
}
statements5;
在任何情况下,finally块中的代码都会执行,不try块中的是否出现异常或者是否被捕获;
考虑下面三种可能出现的情况:
- 如果try块中没有异常
- 如果try块中有一条语句引起异常,并被catch块捕获
- 如果try块中有一条语句引起异常,按时没有被任何catch块捕获
- 执行try块中的statements1语句,执行finally块中的statments4,执行try块中剩下代码statements2,statements3;
- statments1语句存在异常且被catch语句块捕获,跳过statements2和statements3执行catch和finally块中代码,再执行try块中下一语句;
- 跳过try块中语句,执行finally语句并将异常传递给这个方法的调用者;