第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試捕獲最終返回的澄清

嘗試捕獲最終返回的澄清

慕森王 2019-11-26 12:59:12
通過閱讀本論壇中與上述主題相關(guān)的所有問題(請參見標(biāo)題),我完全理解finally總是會調(diào)用該問題。(System.exit和無限循環(huán)除外)。但是,我想知道是否return在catch塊中調(diào)用了a,然后return從finally塊中調(diào)用了另一個。例如:public static void main(String[]args) {    int a = new TestClass().absorbeTheValue();}int absorbeTheValue() {    try {        int a = 10/0;        if (a > 0) return 4;    } catch(Exception e) {        return 45;    } finally {        return 34;    }}    因此,無論如何,這里的輸出(調(diào)用該方法時)將為34。這意味著最終總會運(yùn)行。我認(rèn)為盡管其他“返回”根本沒有執(zhí)行。在許多帖子中,我發(fā)現(xiàn)一個事實,那就是最終將內(nèi)容覆蓋在catch子句return已經(jīng)編寫的內(nèi)容之上。我的理解是,一旦將要對catch子句中的返回值進(jìn)行評估,控制流便會傳遞到finally子句,該子句又具有另一個返回值,這次將對返回值進(jìn)行評估,而不會將控制權(quán)傳遞回catch子句。這樣,return在運(yùn)行時唯一調(diào)用的將是final返回。你同意嗎?甲return在finally不傳遞回控制到程序但返回值,并結(jié)束方法。我們可以這樣說嗎?
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊

如果到達(dá)return了該try塊中的in ,它將控制權(quán)轉(zhuǎn)移到該finally塊,該函數(shù)最終將正常返回(不是拋出)。


如果發(fā)生異常,但是代碼return從該catch塊到達(dá)a ,則控制權(quán)轉(zhuǎn)移到該finally塊,并且該函數(shù)最終正常返回(不是拋出)。


在你的榜樣,你有return在finally,所以不管發(fā)生什么情況,該函數(shù)將返回34,因為finally有最后的(如果你愿意)字。


盡管您的示例中未涉及,但即使您沒有,catch并且如果在try塊中引發(fā)了異常且未捕獲到異常,這也將是正確的。通過return從finally塊執(zhí)行a ,可以完全抑制異常??紤]:


public class FinallyReturn {

  public static final void main(String[] args) {

    System.out.println(foo(args));

  }


  private static int foo(String[] args) {

    try {

      int n = Integer.parseInt(args[0]);

      return n;

    }

    finally {

      return 42;

    }

  }

}

如果您在不提供任何參數(shù)的情況下運(yùn)行它:


$ java最終返回

...中的代碼foo引發(fā)ArrayIndexOutOfBoundsException。但是因為該finally塊執(zhí)行a return,所以該異常得到抑制。


這就是為什么最好避免使用returnin的原因之一finally。


查看完整回答
反對 回復(fù) 2019-11-26
?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊

這是一些顯示其工作原理的代碼。


class Test

{

    public static void main(String args[]) 

    { 

        System.out.println(Test.test()); 

    }


    public static String test()

    {

        try {

            System.out.println("try");

            throw new Exception();

        } catch(Exception e) {

            System.out.println("catch");

            return "return"; 

        } finally {  

            System.out.println("finally");

            return "return in finally"; 

        }

    }

}

結(jié)果是:


try

catch

finally

return in finally


查看完整回答
反對 回復(fù) 2019-11-26
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗 獲得超2個贊

一個塊中的returncatch將“正?!蓖瓿?,而不是“突然”完成。從第11節(jié)中可以很明顯地看出這一點(diǎn):“在引發(fā)異常的過程中,Java虛擬機(jī)突然一個一個地完成了所有已經(jīng)開始但尚未完成的表達(dá)式,語句,方法和構(gòu)造函數(shù)調(diào)用,初始化程序以及字段初始化表達(dá)式。在當(dāng)前線程中執(zhí)行。”

查看完整回答
反對 回復(fù) 2019-11-26
  • 3 回答
  • 0 關(guān)注
  • 403 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號