2016-10-23 99 views
1

我有興趣瞭解使用throw new Exception()new Exception()的最佳實踐。在使用new Exception()的情況下,我已經看到代碼移動到下一個語句,而不是拋出異常。「拋出新異常」和「新異常」之間的區別?

但據我所知,我們應該用new Exception()RuntimeException

任何人都可以扔在這一些輕?

+0

新異常意味着創建一個實例(與new Int埃格爾(...)) 但會發生也不例外,直到你把它...... –

+0

「有人告訴我,我們應該用新的異常()拋出的RuntimeException」靠誰?哪裏?有什麼推理?新的Exception()不會拋出實例化的異常。 – davmac

回答

1

new Exception()手段創建一個實例(與創建新的整數(...)) 但沒有異常將發生,直到你把它...

考慮下面的代碼片段:

public static void main(String[] args) throws Exception { 
    foo(1); 
    foo2(1); 
    } 

    private static void foo2(final int number) throws Exception { 
    Exception ex; 
    if (number < 0) { 
     ex = new Exception("No negative number please!"); 
     // throw ex; //nothing happens until you throw it 
    } 

    } 

    private static void foo(final int number) throws Exception { 
    if (number < 0) { 
     throw new Exception("No negative number please!"); 
    } 

    } 

的方法foo()將拋出一個異常,如果參數是負數,但 如果參數是負數,方法foo2()將創建異常實例

0
Exception e = new Exception(); 

只是創建一個新的異常,你可以稍後拋出。使用

throw e; 

throw new Exception() 

創建並拋出一個行異常

要創建並拋出一個運行時異常

throw new RuntimeException() 
0

new Exception()意味着你正在創建一個新的實例異常類型。這意味着您只是實例化類似於其他對象的對象,如new String("abc")。當您要在接下來的幾行代碼執行中拋出Exception類型的異常時,您會這樣做。

而當你說throw new Exception()這意味着你在說移動程序控制呼叫者,而這個throw語句後不執行進一步的陳述。

如果您發現無法繼續前進並進一步執行,並讓來電者知道我無法處理此案,並且您知道如何處理此案,請執行此操作所以。

有這樣沒有最好的做法,你與蘋果比較桔子。但請記住,當拋出一個異常時,你總會拋出一個有意義的異常,比如IO,如果文件不存在,它會拋出FileNotFoundException而不是它的父項IOException