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
31
32
33
34
35
36
37
|
class Exc{ int a; int b; } public class Except { @SuppressWarnings( "finally" ) static int compute (){ Exc e = new Exc(); e.a = 10; e.b = 10; int res = 0 ; try { res = e.a / e.b; System.out.println( "try ……" ); return res + 1; } catch (NullPointerException e1){ System.out.println( "NullPointerException occured" ); } catch (ArithmeticException e1){ System.out.println( "ArithmeticException occured" ); } catch (Exception e3){ System.out.println( "Exception occured" ); }finally{ System.out.println( "finnaly occured" ); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println( "mian b= " +b); } } |
输出:
1
2
3
|
try …… finnaly occured mian b= 2 |
结论: 如果没有异常, 则执行try 中的代码块,直到 try 中的 return,接着执行 finally 中的代码块,finally 执行完后 , 回到try 中执行 return 。退出函数。
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
31
32
33
34
35
36
37
|
class Exc{ int a; int b; } public class Except { @SuppressWarnings( "finally" ) static int compute (){ Exc e = new Exc(); // e.a = 10; // e.b = 10; int res = 0 ; try { res = e.a / e.b; System.out.println( "try ……" ); return res + 1; } catch (NullPointerException e1){ System.out.println( "NullPointerException occured" ); } catch (ArithmeticException e1){ System.out.println( "ArithmeticException occured" ); } catch (Exception e3){ System.out.println( "Exception occured" ); }finally{ System.out.println( "finnaly occured" ); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println( "mian b= " +b); } } |
输出:
1
2
3
4
|
ArithmeticException occured finnaly occured 0 mian b= 3 |
结论: 如果try 中有异常, 则在异常语句处,跳转到catch 捕获的异常代码块, 执行完 catch 后,再执行 finally ,跳出 try{}catch{}finally{} ,继续向下执行,不会去执行try中 后面的语句。