关于java中try catch finally结合return使用的问题

Open 这个 问答 由 lvdaidai 发布于 2017-08-09 · 1077 阅读 1 回复
lvdaidai 评论于 2017-08-09

在技术交流群里发现一个有趣的问题,这里来mark一下,感兴趣的朋友可以解释下其中的道理.
现有如下代码:

public class Test {
        public static void main(String[] args) {
            System.out.println(getMap().get("KEY").toString());
        }

        public static Map<String, String> getMap() {
            Map<String, String> map = new HashMap<>();
            map.put("KEY", "INIT");

            try {
                map.put("KEY", "TRY");
                return map;
            }catch (Exception e) {
                map.put("KEY", "CATCH");
            } finally {
                map.put("KEY", "FINALLY");
                map = null;
            }

            return map;
        }
    }

结果是:FINALLY

评论
cluster_bug 评论于 2018-01-12
#1

finally语句块会在try中的return返回之前执行,所以,map中的KEY被替换为了”FINALLY”