2011-10-19 32 views
1

我有你的標準try/catch聲明:Java/Eclipse - 確定可能的異常而不強制它們?

try 
{ 
    // Do a bunch of stuff 
} 
catch (Exception e) 
{ 
    throw e; 
} 

有沒有什麼辦法來確定哪些可能的例外情況可以從我的代碼捕獲,而不試圖迫使我的代碼才能看到e是什麼類型的異常的失敗?

例如,如果我這樣做,我想不同的處理一些HTTP調用或者一些JSON東西,我的代碼可能是這樣的:

try 
{ 
    // Do a bunch of stuff 
} 
catch (HttpException e) 
{ 
    // Do something 
    throw e; 
} 
catch (JSONException e) 
{ 
    // Do something else 
    throw e; 
} 
catch (Exception e) 
{ 
    throw e; 
} 

但也許我做了一大堆東西在我的代碼,我不知道(由於缺乏經驗的Java),什麼可能的例外是可以被抓住......

是否有使用Eclipse來看看一組代碼,並得到任何可能的方式可能被捕獲的每種可能類型的例外列表?

回答

3

那麼有兩種類型的異常:選中和未選中。

你不能讓所有的unchecked異常的名單,因爲他們可能不會告訴你它們是什麼。 (搞不好,如果你讀了你使用的庫文件。)

對於檢查異常,你不會,如果你不抓住他們所有能夠編譯代碼。我只是簡單地刪除Exception e塊並用它進行編譯。誠實地捕捉每一個異常是一個壞主意,除非你真的準備好處理它。

0

在NetBeans和可能的Eclipse中,如果您只是在沒有任何try-catch塊的情況下輸入代碼,IDE會向您提示將拋出什麼異常並提供將這些語句包裝在try-catch塊中。這可能是捕獲所有可能異常的最簡單方法。

+0

它能告訴你關於未聲明的未經檢查的異常嗎? – corsiKa

+0

只要它直接暴露在調用路徑中的方法定義中,它就會提示它們。 – Nthalk

+0

@ glowcoder不,他們沒有被檢查,也沒有在可能引發它們的方法的簽名中。正如Bill K所說,它們可以以任何方式創建,包括動態地創建。 –

1

有沒有辦法讓可能的unchecked異常列表。由於它們沒有在任何地方聲明(它們是在飛行中創建的),如果沒有一個非常特定的代碼分析工具,它就不可能實現 - 即使這樣它也可能無法從編譯的庫類中捕獲某些代碼。

對於棘手的事情預測的例子考慮分配內存的任何事情可以拋出內存不足的異常,你甚至可以反射性地實例化一個異常,這是幾乎不可能用任何靜態分析工具找到。

如果你真的非常偏執,你可能會遇到RuntimeException,那應該得到你想要處理的所有未經檢查的異常 - 這不是一個推薦的策略,但可以防止你的程序從一些未知/未知的未來錯誤中失敗。 ..

這是很好的形式把任何拋出的異常到的意見,但這種做法沒有始終如一地遵循。

相關問題