2017-10-08 61 views
-3

請解釋返回異常與拋出異常之間的區別嗎?java中的異常返回

我看到一些程序使用return new IOException()和throw new IOException()。爲什麼我們使用return語句,那時包含上面return語句的方法是停止執行的?

+7

請出示你的時候已經看到返回而不是拋出的異常的一個完整的例子 –

回答

0

拋出異常意味着什麼是錯誤的,你必須嘗試捕獲執行或它會停止線程。

另一方面,返回異常意味着什麼都沒有發生錯誤。你只是創建一個對象(就像任何其他對象一樣)。您仍然需要拋出該異常對象來讓程序知道異常發生。

假設您想要例外Device is not ready。現在,你可以保持一個方法來創建一個例外就是這樣,

public Exception getMyException() { 
    return new Exception("Device is not ready yet."); 
} 

要使用該exception你需要調用該方法,並拋出異常類似下面的,

public void checkFile() { 
    if(...check device status is not ready ...) { 
    throw getMyException();// or you could use any built-in ex like new IOException("...."); 
    } 
} 
1

請解釋返回異常和拋出異常之間的區別。

的區別是:

  • 拋出異常是做正常的事情。它改變了控制流程。

  • 返回異常是合法的,但不尋常。它不會改變控制流程。

1 - ......除了在任何return語句做這個的意義。 JLS談到執行的聲明正常完成突然完成。如果您需要詳細信息,請閱讀JLS 14.1


但是....

return new SomeException(...); 

....就是做一個相當可疑的事情。我能想到的唯一合理的用例是如果你的代碼使用這些異常對象來標記多個錯誤,並且其他的東西正在收集和報告它們。如果您需要捕獲檢測到錯誤的位置的堆棧跟蹤,則您可以可能會。但是,如果不是,使用這樣的例外簡直是醜陋而且效率低下。


爲什麼我們使用return語句,在那一刻,其中包括上述return語句的方法,是停止執行?

No.返回異常與返回任何其他值沒有區別。它不會停止執行。


如果您向我們展示了這樣一個(真實)應用程序代碼的示例,我們可以解釋它。

+0

類Demo { \t公共靜態無效的主要(字符串ARGS []){方法();} \t公共靜態INT()方法如果我們對這個程序進行了簡化,它的方法()返回值爲5,並停止method();的執行;否則, 類Demo {公共靜態無效的主要(字符串ARGS []){方法();}公共靜態IOException的方法(){嘗試{返回新IOException的();}最後{返回新IOException的();}}} 但是這種情況下,如果我們對第一個返回語句進行了合併,它將返回IOException對象,並且它應該停止method()的執行。但是finally會運行,所以method()的執行不會停止。 –

+1

1)把你的代碼放入問題中。使用「編輯」鏈接!你的代碼在評論中幾乎不可讀。 2)這不是我真正要求的**真實**應用程序。這只是一個玩具的例子。 3a)不,它不應該。 3b)因爲這不是Java的工作方式! –