上节课我们学习了异常的抛出和捕获,这节课我们再来学一个关键字: finally
finally和final是不一样的哦,final是声明常量的,而finally是做异常处理的。
finally语法:
(资料图片仅供参考)
try{
可能包含异常的代码
}catch(异常类 变量名){
异常处理代码
}...(多个catch)
finally{
后置处理代码
}
来看一个小例子:
Demo:
public static void main(String[] args) { try { test(); } catch (Exception e) { e.printStackTrace(); }}public static void test() throws Exception { try { throw new Exception("lalalala"); }catch (RuntimeException e){ e.printStackTrace(); }finally { System.out.println("finally"); }}
输出:
finally
java.lang.Exception: lalalala
at helloworld.exception.FinallyTeach.test(FinallyTeach.java:15)
at helloworld.exception.FinallyTeach.main(FinallyTeach.java:7)
结论:
异常如果没有被捕获,会执行finally的代码
Demo 2:
public static void main(String[] args) { try { test2(); } catch (Exception e) { e.printStackTrace(); }}public static void test2() throws Exception { try { throw new RuntimeException("abcd"); }catch (RuntimeException e){ e.printStackTrace(); }finally { System.out.println("finally"); }}
输出:
finally
java.lang.RuntimeException: abcd
at helloworld.exception.FinallyTeach.test2(FinallyTeach.java:25)
at helloworld.exception.FinallyTeach.main(FinallyTeach.java:7)
结论: 如果异常被捕获,依然会执行finally里的代码
最终结论:
无论异常是否被捕获,finally的代码一定会被执行。finally里适合存放释放资源、后续处理的代码