曾经有人问过这么一种状况,就是在try catch finnally里面分别添加了一个return,那么返回的值是哪一个里面的。这种问题很纠结啊,单纯按照书本知识确定会回答,finnally里面的哈~但是实际状况又是复杂多变的。java
笔者作了一次实验,在上述的状况下,确实是返回了finnally里面的值。可是,咱们在想一想,若是考官把这种状况修改一下呢?若是不在finnally里面加return,那么finnally里面的信息是否执行了呢?答案是会执行,可是return的是try里面的值。面试
不少朋友都说,哪一个傻缺会在try cache finnally里面都加return呢?至少没见过有人这么写,答案就是那个考官呗,哈哈,开个玩笑,别当真。编程
接下来,咱们看看这样一种状况:this
import java.util.concurrent.locks.ReentrantLock; /** * @author hassop * @Description * @date 2016/8/19 0019 * To change this template use File | Settings | File Templates. */ public class TryTest { private final static ReentrantLock clientLock = new ReentrantLock(); public static final String test() { String t = ""; try { clientLock.lock(); t = "try"; System.out.println("加锁成功"); return t; } catch (Exception e) { // result = "catch"; t = "catch"; return t; } finally { t = "finally"; clientLock.unlock(); System.out.println("解锁成功"); /*return t;*/ //加上返回finnally } } public static void main(String[] args) { System.out.println(TryTest.test()); } }
你以为该是怎么样的结果呢?ip
答案就是这个io
加锁成功
解锁成功
tryclass
public class TryTest { private final static ReentrantLock clientLock = new ReentrantLock(); public static final String test() { String t = ""; try { clientLock.lock(); t = "try"; System.out.println("加锁成功"); return t; } catch (Exception e) { // result = "catch"; t = "catch"; return t; } finally { t = "finally"; clientLock.unlock(); System.out.println("解锁成功"); return t; //加上返回finnally } } public static void main(String[] args) { System.out.println(TryTest.test()); } }
加锁成功
解锁成功
finallytest
至此,咱们既要知道考官给咱们埋坑时候的答案,也要知道正常编程时候须要注意的一些细节。import
最后,我以为这样的问题,考官想了解面试者什么呢?谁给我个答案。cli
若是想了解具体缘由须要分析二进制文件。