码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础知识强化之IO流笔记06:面试题之如果在finally之前有return

时间:2015-09-28 20:48:00      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

1. 至少有两种情况下finally语句是不会被执行的:

(1)try语句没有被执行到,如在try语句之前return就返回了这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

-->1.案例如下:

 1 package com.himi.finallydemo;
 2 
 3 public class FinallyDemo2 {
 4 
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7 
 8     }
 9 
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.exit(0);
14             System.out.println(a / 0);
15             a = 20;
16 
17         } catch (ArithmeticException e) {
18             a = 30;
19             // return a;
20         } finally {
21             a = 40;
22         }
23 
24         return a;
25     }
26 
27 }

运行效果如下:

上面的getInt()方法中,先执行int a = 10;然后再执行try语句,发现开始就是System.exit(0),这样虚拟机jvm直接退出,随意不会印出任何信息。

技术分享

 

-->2. 案例如下:

 1 package com.himi.finallydemo;
 2 
 3 public class FinallyDemo2 {
 4 
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7 
 8     }
 9 
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.out.println(a / 0);//执行完,直接跳转到第17行
14             System.exit(0);
15             a = 20;
16 
17         } catch (ArithmeticException e) {
18             a = 30;
19             // return a;
20         } finally {
21             a = 40;
22         }
23 
24         return a;
25     }
26 
27 }

运行如下效果:

这里在try语句中执行System.out.println(a / 0),系统会马上捕获到异常直接执行catch语句,然后执行finally语句,最后return a

(此时a是40)

技术分享

 

 

-->3.案例:

 1 package com.himi.finallydemo;
 2 
 3 public class FinallyDemo2 {
 4 
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7 
 8     }
 9 
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.out.println(a / 0);
14             System.exit(0);
15             a = 20;
16 
17         } catch (ArithmeticException e) {
18             a = 30;
19             return a;
20             /*
21              * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
22              * 但是呢,它发现后面还有finally,所以继续执行fianlly的内容,a=40
23              * 再次回到以前的返回路径,继续走return 30;
24              */
25         } finally {
26             a = 40;
27             //return 40;//如果这样结果就是40
28         }
29 
30         return a;
31     }
32 
33 }

运行效果如下:

技术分享

Java基础知识强化之IO流笔记06:面试题之如果在finally之前有return

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4844883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!