finally的作用

172 阅读1分钟

上节课我们学习了异常的抛出和捕获,这节课我们再来学一个关键字: 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里适合存放释放资源、后续处理的代码