--- title: Java SE笔记: 深入finally语句块 date: 2016-08-21 21:20:00 updated: 2016-08-21 21:20:00 description: "深入finally语句块" categories: [个人笔记] tags: [Java, Java SE笔记] --- ### 关于finally语句块 1. finally语句块可以直接和try语句块联用。 try....finally... 2. try...catch....finally 也可以. 3. 在finally语句块中的代码是一定会执行的。 4. `finally语句块是一定会执行的,所以通常在程序中为了保证某资源一定会释放,所以一般在finally语句块中释放资源。` 5. `如果在finally语句块中写了return语句,则会把之前的返回值覆盖,要避免这种情况!` ### 只有以下情况例外: 只要在执行finally语句块之前退出了JVM,则finally语句块不会执行. ```java try { //退出JVM System.exit(0); } finally { //不会执行. System.out.println("finally...."); } ``` ### try finally底层实现原理(面试题): ```java int i = 10; try { return i; } finally { i++; System.out.println("m1的i=" + i); //11 } //以上代码的执行原理 /* int i = 10; try { int temp = i; return temp; } finally { i++; System.out.println("m1的i=" + i); //11 } */ int a = 0; try { return a; } finally { return 100;// 把前面确定返回值覆盖了 } ``` ### 关于final, finalize, finally: `三者没有关系,final是修饰符,具体详见final关键字,finalize是方法,在JVM垃圾回收时执行,finally是异常机制中的语句块!`