曾經有人問過這麼一種狀況,就是在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
若是想了解具體緣由須要分析二進制文件。