成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

try catch finally

xialong / 976人閱讀

摘要:中,然后去執(zhí)行,發(fā)現(xiàn)中也有,然后就執(zhí)行的是中的,返回值為。我們看看中對(duì)變量的改變對(duì)返回值有沒(méi)有影響。中中中這里雖然執(zhí)行了,但是改變的是的值,并沒(méi)有改變返回值。

問(wèn)題描述 筆試

這是京東校招的筆試題:

運(yùn)行

打印運(yùn)行結(jié)果,就是3。

分析

我們將returnfinally拆為幾種情況綜合分析。

finally之后return
private static int func() {
    int a = 1;
    try {
        System.out.println("try");
        return a;
    } catch (Exception e) {
        System.out.println("catch");
    } finally {
        System.out.println("finally");
    }
    System.out.println("afterFinally");
    return 10;
}

看執(zhí)行結(jié)果,我們分析return的原理。

try中執(zhí)行到return時(shí),先把這個(gè)值存起來(lái),再開(kāi)辟一塊內(nèi)存存這個(gè)值,然后去執(zhí)行finally,finally執(zhí)行之后,回去執(zhí)行之前沒(méi)執(zhí)行完的return語(yǔ)句,將值返回。所以這種情況下,finally后的代碼塊是不執(zhí)行的。

finally中return
private static int func() {
    int a;
    try {
        System.out.println("try");
        a = 1;
        return a;
    } catch (Exception e) {
        System.out.println("catch");
        a = 2;
        return a;
    } finally {
        System.out.println("finally");
        a = 3;
        return a;
    }
}

這就和筆試題中一樣了。

tryreturn,然后去執(zhí)行finally,發(fā)現(xiàn)finally中也有return,然后就執(zhí)行的是finally中的return,返回值為3

finally中改變變量的值 基本數(shù)據(jù)類(lèi)型

將上一個(gè)例子中finally中的return a;刪了,就是我們接下來(lái)的測(cè)試。我們看看finally中對(duì)變量的改變對(duì)返回值有沒(méi)有影響。

private static int func() {
    int a;
    try {
        System.out.println("try");
        a = 1;
        return a;
    } catch (Exception e) {
        System.out.println("catch");
        a = 2;
        return a;
    } finally {
        System.out.println("finally");
        a = 3;
    }
}

trya = 1;

tryreturn a;

finallya = 3;

這里雖然執(zhí)行了a = 3,但是改變的是a的值,并沒(méi)有改變返回值。

要是不信我們?cè)?b>finally再添加一行輸出以驗(yàn)證我們的猜想。

引用數(shù)據(jù)類(lèi)型

相信這里我分為兩個(gè)類(lèi)別來(lái)敘述,熟悉Java的你應(yīng)該明白我接下來(lái)要說(shuō)什么了。

建個(gè)類(lèi)MyObject,這里是為了演示方便才將value設(shè)置為public的,不要效仿啊。

public static void main(String[] args) {
    MyObject object = func();
    System.out.println(object.value);
}

private static MyObject func() {
    MyObject myObject = new MyObject();
    try {
        System.out.println("try");
        myObject.value = 1;
        return myObject;
    } catch (Exception e) {
        System.out.println("catch");
        myObject.value = 2;
        return myObject;
    } finally {
        System.out.println("finally");
        myObject.value = 3;
    }
}

與之前類(lèi)似,不過(guò)這里是在finally中修改對(duì)象的屬性。

運(yùn)行,返回的結(jié)果是我們?cè)?b>finally中改變過(guò)的值。

finally中改變的,是myObject這個(gè)對(duì)象的value值,這個(gè)對(duì)象在堆內(nèi)存中,而棧內(nèi)存中用于返回的對(duì)象,其實(shí)也是堆內(nèi)存中對(duì)象的引用,所以finally的改變會(huì)改變引用數(shù)據(jù)類(lèi)型的返回值。

總結(jié)
格物致知,這是對(duì)基礎(chǔ)的最佳實(shí)踐。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76855.html

相關(guān)文章

  • try-catch-finally中的return

    摘要:基礎(chǔ)系列的與方法類(lèi)初始化順序線程池如何彈性伸縮的幾個(gè)要點(diǎn)的緩存什么場(chǎng)景下使用阻塞隊(duì)列的使用及模式中的序本文主要簡(jiǎn)述中有的情況。參考關(guān)于中的執(zhí)行順序 Java基礎(chǔ)系列 Java的hashcode與equals方法 Java類(lèi)初始化順序 ThreadPoolExecutor線程池如何彈性伸縮 HashMap的幾個(gè)要點(diǎn) Integer的緩存 什么場(chǎng)景下使用阻塞隊(duì)列 volatile的使用及...

    fizz 評(píng)論0 收藏0
  • Will it finally: 關(guān)于 try/catch 的一些細(xì)節(jié)

    摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。 隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用finally做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。 當(dāng)你...

    asce1885 評(píng)論0 收藏0
  • Will it finally: 關(guān)于 try/catch 的一些細(xì)節(jié)

    摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。 隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用finally做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。 當(dāng)你...

    zhangrxiang 評(píng)論0 收藏0
  • Will it finally: 關(guān)于 try/catch 的一些細(xì)節(jié)

    摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。 隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用finally做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。 當(dāng)你...

    褰辯話 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<