上节课我们学习了异常的抛出和捕获,这节课我们再来学一个关键字: 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里的代码


最终结论:


  1. 无论异常是否被捕获,finally的代码一定会被执行。
  2. finally里适合存放释放资源、后续处理的代码

finally的作用_java