国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

try catch finally

xialong / 970人閱讀

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

問題描述 筆試

這是京東校招的筆試題:

運(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時,先把這個值存起來,再開辟一塊內(nèi)存存這個值,然后去執(zhí)行finallyfinally執(zhí)行之后,回去執(zhí)行之前沒執(zhí)行完的return語句,將值返回。所以這種情況下,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ù)類型

將上一個例子中finally中的return a;刪了,就是我們接下來的測試。我們看看finally中對變量的改變對返回值有沒有影響。

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的值,并沒有改變返回值。

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

引用數(shù)據(jù)類型

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

建個類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;
    }
}

與之前類似,不過這里是在finally中修改對象的屬性。

運(yùn)行,返回的結(jié)果是我們在finally中改變過的值。

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76855.html

相關(guān)文章

  • try-catch-finally中的return

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

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

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

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

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

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

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

    褰辯話 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<