2017-08-10 81 views
1

我需要處理特定的異常和其他所有異常,它應該給我們相同的日誌信息,但日誌記錄的級別應該不同(前者應該去log.warn,剩下的他們應該去log.error)java中的多重處理異常

 try { 
     } 
     catch (someexception e) { 
     log.warn("some message") 
     -----some code---- 
     } 
     catch(AllotherExceptions e) { 
     log.error("same message as above") 
     -----same code as above---- 
     } 

這需要minimalized的消息是相同的,但需要做的代碼作爲公共代碼的其餘部分,而不是寫幾次

+0

請詳細說明一個例子。更好 - 向我們展示您迄今爲止所做的工作,並解釋您希望我們幫助您改進的內容。 –

+0

所以你想要以不同的方式處理單獨的異常?或者你想一次處理所有的問題? @Emoji – cunniemm

+0

使用'try {...} catch(MyFirstException mfe){} catch(MySecondException mse){}' – Nathan

回答

0
try{ 
//try something 
} catch (SomeTypeException e){ 
//things 
} catch (AnotherException e){ 
//AnotherThings 
} 
1

您可以使用多個catch塊來完成這個任務,並且捕獲所有檢查的異常的基類Exception,最後一個。例如:

try { 
    // Your code here. 
} catch (SpecificException e) { 
    log.warn("Warning!", e); 
} catch (AnotherSpecificException e) { 
    log.warn("Another warning!", e); 
} catch (Exception e) { 
    log.error("Error!", e) 
} 
1

只需添加幾閉鎖段和一個包羅萬象的完成。

try { 
// Some code 
} 
catch (IOException ex) { 
    logger.log(ex); 
    throw ex; 
catch (Exception ex) { 
    logger.log(ex); 
    throw ex; 
} 

在這裏閱讀更多:Documentation

0

下面的例子,這是有效的Java SE 7中和後,消除了重複代碼:

try{ 

    } 
    catch (IOException|SQLException ex) { 
     logger.log(ex); 
     throw ex; 
    } 
0

由於Java 7,你可以做一個嘗試-Multicatch

try { 
     new Foo("").doSomething(); 
    } catch (Exception1 | Exception2 e) { 
     e.printStackTrace(); 
    } 
2

你有幾種方法可以做到這一點。你可以,如在以前的答案,使連續catch語句是這樣的:

try { 
    // Code that potentially throws multiple exceptions 
} 
catch (IOException ex) { 
    // Manage this particular exception case 
} 
catch (Exception ex) { 
    // Manage remaining exceptions 
} 

這樣你就可以管理特定的情況下,並定義一個點,所有涉及到以下動作異常進行管理。通過在您的流程(主循環,繁重的服務調用...)中儘早提供此try聲明,您將管理許多例外情況,但由於您不知道將哪些特定操作拋出,因此無法管理特定情況。通過包裝一些特定的操作(訪問文件,請求...),您將能夠對這些異常進行非常具體的管理。

正如在回答指出,與Java> = 7這個語法將工作:

try { 
    // Code that potentially throws multiple exceptions 
} 
catch (IOException|SQLException ex) { 
    // Manage these particular exceptions 
} 
catch (Exception ex) { 
    // Manage remaining exceptions 
} 

這種方式是用來當你需要管理不同的異常完全相同的方式。當單個動作拋出不同的異常(即訪問文件)時,它特別有用,但您只想特別管理一些特定的錯誤情況,而不必擔心可能拋出的所有內容。

+0

消息是相同的,但需要發送代碼的其餘部分作爲通用代碼而不是寫它幾次 – Emoji

+0

不知道我是否完全明白你願意做什麼,但也許第二種管理異常的方式我把我的答案放在關鍵:只要把你認爲是警告的每一個異常和另一個異常都捕捉出來,那麼每個異常都是錯誤 –

+0

你可以在帖子中查看修改過的代碼。我需要將相同塊的代碼作爲單個時間給出,而不是給出相同的代碼幾次 – Emoji