Java SE笔记: 深入finally语句块

关于finally语句块

  1. finally语句块可以直接和try语句块联用。 try….finally…
  2. try…catch….finally 也可以.
  3. 在finally语句块中的代码是一定会执行的。
  4. finally语句块是一定会执行的,所以通常在程序中为了保证某资源一定会释放,所以一般在finally语句块中释放资源。
  5. 如果在finally语句块中写了return语句,则会把之前的返回值覆盖,要避免这种情况!

只有以下情况例外:

只要在执行finally语句块之前退出了JVM,则finally语句块不会执行.

1
2
3
4
5
6
7
8
try {
//退出JVM
System.exit(0);
}
finally {
//不会执行.
System.out.println("finally....");
}

try finally底层实现原理(面试题):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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是异常机制中的语句块!

文章目录
  1. 1. 关于finally语句块
  2. 2. 只有以下情况例外:
  3. 3. try finally底层实现原理(面试题):
  4. 4. 关于final, finalize, finally: