zoukankan      html  css  js  c++  java
  • finally中的return

      周五晚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,对原来的结果没有一点影响。
  • 相关阅读:
    第十二章,结束练习
    第十一章,表单
    第十章,表格练习
    第九章,跨行跨列的表格
    第八章,表格
    第七章,列表
    第六章,body当中的属性
    第五章,标签的使用
    6. C# 命名规则
    5. c#变量
  • 原文地址:https://www.cnblogs.com/guanghe/p/9158951.html
Copyright © 2011-2022 走看看