码迷,mamicode.com
首页 > 其他好文 > 详细

finally中的return

时间:2018-06-09 13:22:40      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:nal   nbsp   final   遇到   虚拟机   调用   get   ring   str   

  周五晚6点下班去面试,出了一份笔试题,看到第一题有些蒙了,虽然以前遇到过类似的问题,但并没有留心记一下,觉得没人会这样写代码,但实际上没有面试题中是有的。

1,有在try块中执行不到finally的情况吗?

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

2,try和finally中的try,哪一个会被执行?

  肯定是finally中的,因为无论try中写了多少return,在return的一刹那,会被finally捕获,之后执行finally中的代码,finally中return了就没有try中return什么事了。

3,try中return后的代码会执行吗?

  会的,调用finally的时机是try块真的要return时。

 1 public class FinallyTest3 {
 2 
 3     public static void main(String[] args) {
 4 
 5         System.out.println(test3());
 6     }
 7 
 8     public static int test3() {
 9         int b = 20;
10 
11         try {
12             System.out.println("try block");
13 
14             return b += 80;
15         } catch (Exception e) {
16 
17             System.out.println("catch block");
18         } finally {
19 
20             System.out.println("finally block");
21 
22             if (b > 25) {
23                 System.out.println("b>25, b = " + b);
24             }
25 
26             b = 150;
27         }
28 
29         return 2000;
30     }
31 
32 }

结果为

try block
finally block
b>25, b = 100
100
 1 import java.util.*;
 2 
 3 public class FinallyTest6
 4 {
 5     public static void main(String[] args) {
 6         System.out.println(getMap().get("KEY").toString());
 7     }
 8      
 9     public static Map<String, String> getMap() {
10         Map<String, String> map = new HashMap<String, String>();
11         map.put("KEY", "INIT");
12          
13         try {
14             map.put("KEY", "TRY");
15             return map;
16         }
17         catch (Exception e) {
18             map.put("KEY", "CATCH");
19         }
20         finally {
21             map.put("KEY", "FINALLY");
22             map = null;
23         }
24          
25         return map;
26     }
27 }

结果为

FINALLY
为什么测试用例1中finally里的b = 150;并没有起到作用而测试用例2中finally的map.put("KEY", "FINALLY");起了作用而map = null;却没起作用呢?这就是Java到底是传值还是传址的问题了,简单来说就是:Java中只有传值没有传址,这也是为什么map = null这句不起作用。这同时也说明了返回语句是try中的return语句而不是 finally外面的return b;这句,不相信的话可以试下,将return b;改为return 294,对原来的结果没有一点影响。

finally中的return

标签:nal   nbsp   final   遇到   虚拟机   调用   get   ring   str   

原文地址:https://www.cnblogs.com/guanghe/p/9158951.html

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