1. 程式人生 > >Java小細節——try/catch/finally/return不得不說的祕密

Java小細節——try/catch/finally/return不得不說的祕密

閱讀2分鐘,掌握一個Java小細節,你值得擁有!

java面試經常能看到這道題目:

try {} 裡有一個return語句,那麼緊跟在這個try後的finally {}裡的程式碼會不會被執行?什麼時候被執行?在return前還是後?

try/catch/finally 都有return 語句

public class tryCatchDemo {

    public static void main(String[] args) {
        String str = testTryCatch();
        System.out.println(str
); } public static String testTryCatch(){ int index = 0; try{ index++; return "tryReturn"+index; } catch (Exception e){ index = index-10; return "catchReturn"+index; } finally { index--; return
"finallyReturn"+index; } } }

這裡寫圖片描述

再看一個例子,注意看執行順序,非常重要

public class tryCatchDemo {

    public static void main(String[] args) {
        String str = testTryCatch();
        System.out.println(str);
    }

    public static String testTryCatch() {
        int index = 0;
        try {
            index
++; return "tryReturn" + (++index); } catch (Exception e) { index = index + 10; return "catchReturn" + (++index); } finally { //index--; return "finallyReturn" + index; } } }

這裡寫圖片描述

在try和finally中都有return的情況下,會先執行try中return語句,然後執行finally。所以千萬得注意到這個執行順序,會影響到最終得返回值。

try/catch 有return語句

public static void main(String[] args) {
        String str = testTryCatch();
        System.out.println(str);
    }

    public static String testTryCatch() {
        int index = 0;
        try {
            index++;
            String nullStr = null;
            nullStr.toString();
            return "tryReturn" + (++index);
        } catch (Exception e) {
            index = index + 10;
            return "catchReturn" + (++index);
        } finally {
            System.out.println("finally");
        }
    }

這裡寫圖片描述

無論是try還是catch,都會先執行return語句然後再執行finally。

總結:
1、不管有沒有出現異常,finally塊中程式碼都會執行;
2、當try和catch中有return時,finally仍然會執行;
3、finally是在return後面的表示式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值儲存起來,不管finally中的程式碼怎麼樣,返回的值都不會改變,任然是之前儲存的值),所以函式返回值是在finally執行前確定的;
4、finally中最好不要包含return,否則程式會提前退出,返回值不是try或catch中儲存的返回值。

finally中最好不要有return,阿里程式設計規約也約定了。

相關推薦

Java細節——try/catch/finally/return不得不說的祕密

閱讀2分鐘,掌握一個Java小細節,你值得擁有! java面試經常能看到這道題目: try {} 裡有一個return語句,那麼緊跟在這個try後的finally {}裡的程式碼會不會被執行?什麼時候被執行?在return前還是後? t

JAVA try catch finally return 執行順序

JAVA try catch finally return 執行順序 參考:https://www.cnblogs.com/superFish2016/p/6687549.html 一、結論 1、不管有沒有出現異常,finally塊中程式碼都會執行; 2、當try和catch中有

關於java中的try-catch-finally語句和return

本部落格所有轉載文章的所有權都歸原作者所有,這裡只是共享以及傳播知識作用,每篇文章都會在開頭標明出處,請尊重原作者版權。 第一:return語句並不是函式的最終出口,如果有finally語句,這在return之後還會執行finally(return的值會暫存在棧裡面,

Android面試之java基礎try-catch-finally-return的執行先後順序問題

還是一個被個程式猿們討論多時的問題,也是眾軟體公司面試題中很鍾情的一個問題,更是一個考查程式猿對Java基礎知識掌握理解程度的問題,就是本文要說的try-catch-finally-return的執行先後順序問題 先說明幾個原則 。 1、不論是否能捕捉到異常,fin

try-catch-finally-return 的執行順序

結論: 1、不管有沒有出現異常,finally塊中程式碼都會執行; 2、當try和catch中有return時,finally仍然會執行; 3、finally是在return後面的表示式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值儲存起來,不管fi

try catch finally,return組合使用

    在java中採用了異常捕獲機制,因此我們說java具有robustness特性:在java中對系統或對一些關鍵資料的操作需要加上try,catch塊,用於捕獲這部分可能發生異常的程式碼,能夠發現異常,警示程式設計人員可能發生的錯誤。try,catch,finally是三個關鍵部分:     組合

Java異常機制--try catch finally 執行順序詳解

引言 關於try catch finally 執行順序的筆試面試題目非常的多,我曾經在牛客網刷題的時候不止一次的碰到過,而且不止一次的做錯過,這裡面需要涉及的細節如果不弄清楚每次做題就會產生似是而非的感覺。這次查閱了很多相關資料,關於try catch fin

Java異常處理try-catch-finally的執行過程

try-catch-finally程式塊的執行流程以及執行結果比較複雜。基本執行過程如下: 程式首先執行可能發生異常的try語句塊。如果try語句沒有出現異常則執行完後跳至finally語句塊執行;如果try語句出現異常,則中斷執行並根據發生的異常型別跳至相應的catch語

Java解惑之try catch finally

此文起因是由於論壇中出現的這兩個討論貼: 至於這個問題是否值得深究我們不做討論,人跟人觀點不一樣,我就覺得很有意思,所以可以試著分析一下。 不過要提前說明一下,可能有的地方我的理解並不正確或者措辭並不恰當,還希望高手指正。 首先,還是先看下問題,程式碼如下: Java程式碼   priva

java中使用try-catch-finally一點值得注意的事

我們知道,try負責圈定可能會出異常的程式碼;catch負責處理try中可能異常的處理,如記錄錯誤日誌,使業務能夠正常執行;finally負責資源釋放等善後工作,無論有無異常都必須要執行的程式碼,一般

關於try-catch-finally-return語句的執行順序

直接貼程式碼 main函式 public static void main(String[] args) { System.out.println("=============

try catch finally return?

/**  * try catch finally 中含有return 總結  * Created by nier_ni on 2014/8/6.  */ public class TrySequency {     /**      * try catch finally

java 異常捕捉 ( try catch finally ) 你真的掌握了嗎?

前言:java 中的異常處理機制你真的理解了嗎?掌握了嗎?catch 體裡遇到 return 是怎麼處理? finally 體遇到 return 怎麼辦?finally 體裡有 System.exit() 方法怎麼處理?當 catch 和 finally 體裡同時遇上 r

Java基礎知識--try-catch-finally

看了一位博友的一片文章,講解的是關於java中關於try、catch、finally中一些問題 下面看一個例子(例1),來講解java裡面中try、catch、finally的處理流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

關於java 異常捕捉 ( try catch finally ) 執行流程

java中使用try catch finally做異常處理的情形較為常見,關於執行具體不同情況下的執行流程,在另一篇帖子中看到,說明較為詳細,但例子沒看太懂,故用自己的程式碼做貼留念。 參考部落格 以下內容在‘假設方法需要返回值’的前提下,如沒有此前提

Javatry catch finally 中有異常和return時處理先後

public class TestDemo { private static String output = ""; public static void foo(int i) { try { if (i == 1) { throw new Exception(); }

Javatry catch finally語句中含return語句的執行情況總結-程式設計陷阱

前言:有java程式設計基礎的人對java的異常處理機制都會有一定了解,而且可能感覺使用起來也比較簡單,但如果在try catch finally語句塊中遇到return語句,開發者可能就會遇到一些邏輯問題,甚至步入程式設計的陷阱。不信,我們先看看一段小程式,讀

關於JAVAtry catch finallyreturn返回值問題

轉載自:《http://blog.csdn.net/chengzhezhijian/article/details/17264531》 下面看一個例子(例1),來講解java裡面中try、catch、finally的處理流程 publicclass TryCa

程式設計師面試金典: 9.14 Java 14.2在Java中,若在try-catch-finallytry語句塊中插入return語句,finally語句塊是否還會執行?

問題:在Java中,若在try-catch-finally的try語句塊中插入return語句,finally語句塊是否還會執行? 分析:不一定。如果在try語句中走到return語句之前都沒有發生異常,會走到return語句,就直接返回了。               如

Try-Catch-Finally代碼塊中的return

打印 代碼 style pri bsp 自己 println public row 測試類的原型是這樣子的 public class TryCatchFinallyToReturn { public static void main(String[] args)