2013-01-17 45 views
-3

您認爲哪種方式更適合您的異常處理,if報表或Try/Catch塊?異常處理,如果Statements或Try/Catch塊?

因爲,如您所知,所有異常都可以使用if語句處理。

+0

這是一個錯誤,編輯 – Sajad

+0

可能是@APoliteBoy的意思是所有的異常可以使用'If'語句來處理? – TheWhiteRabbit

+0

你能否提供一個由'try catch'和'if'語句處理的例外情況? –

回答

1

這取決於具體情況。我會盡力解釋。

考慮一個簡單的例子:

try { 
    myVar.myFunc(); 
} 
catch(NullPointerException e) { 
    //bla bla 
} 

OR

if (myVar != null) 
    myVar.myFunc(); 

如果myVar可以null爲你的代碼流的一部分,那麼你可以使用if語句,否則你應該使用例外,因爲它可能是由於不受你控制的事情。

+0

這非常有用,謝謝! – Sajad

0

那麼,從我的理解你的意思與if/else語句的函數的返回值將成功或失敗,所有實際工作將在函數的參數完成。

這是C風格編碼 - 沒有例外。
在java中,因爲你不能通過引用(或指針)傳遞元素,所以這種方法是有問題的(你將不得不爲一個返回int,非常不優雅的方法創建一個包裝器),甚至在C中 - 它更多一個必需品然後是優雅的東西。

示例 - 一個C風格的代碼可以做:

int calcSomething(int arg1, int arg2, int* result) { 
    //calcualtions 
    if (...) return FAILURE; 
    *result = ... 
    return SUCCESS; 
} 

和編碼環境將是:

if (calcSomething(...) == FAILURE) { handleError(); } 

注 - 的做法並沒有完全用Java diasppear,例如Collection#add()返回boolean表示操作是否成功。它主要用於操作,其中false的值並非真正的錯誤 - 更多表明無所事事。

每當「錯誤」被阻止時 - 使用異常進行錯誤處理 - 它們更具可讀性並且可以更好地維護代碼。如果它只是一個指示(對於eaxmple - 元素已經在集合中) - 返回值中的布爾值可以很好。

+0

這是如此有用,謝謝! – Sajad