規範來說,所有可能被throw的exception都要去catch嗎?

來源:互聯網
上載者:User
有些時候我明明知道這樣做絕不會引起exception,還要去catch嗎?

又有些時候,被觸發的錯誤是致命的,而且不是因為使用者操作而引起的。這樣,就算catch了,也是die。這樣來說,catch這個exception又有什麼意義呢?

然而我總是看到很多說法說一定不要只throw就不管了,不去catch。

那到底應該怎麼做呢?

回複內容:

有些時候我明明知道這樣做絕不會引起exception,還要去catch嗎?

又有些時候,被觸發的錯誤是致命的,而且不是因為使用者操作而引起的。這樣,就算catch了,也是die。這樣來說,catch這個exception又有什麼意義呢?

然而我總是看到很多說法說一定不要只throw就不管了,不去catch。

那到底應該怎麼做呢?

個人覺得錯誤處理方面,需要把握一個度,而對這個度的把握卻又十分困難。

我的理解是:

  • 首先,基本、必要的exception一定要做。

  • 其次是並不需要儘可能的catch所有的exception,否則

    • 錯誤處理代碼冗長

    • 執行效率問題

    • 有些exception catch了,但沒有更好的辦法處理;比如是代碼的bug,反而應該儘可能的把代碼的bug暴露出來,然後儘早解決。

  • 最後總結一下,異常處理需要把握一個度,我認為的這個度是:

    • 做基本和必要的異常處理

    • 不刻意為了追求完美而去做所有的異常處理,有些問題應該儘早暴露和解決

我的經驗:

  1. Catch已知能夠處理的異常,error logging其它異常讓程式員手動去處理

  2. 異常處理分層次,在實現自己的模組時,將依賴的第三方模組的異常處理包含在自己的模組內

Java異常處理的10個最佳實務

  • 然而總有人喜歡像折騰輪子一樣自己去總結一套,爬坑出來才發現別人造的輪子是那麼的不錯(笑)。

計算是catch了也不一定就是die了,捕獲異常主要是為了處理異常而不是die掉,比如在發送郵件的時候因為網路原因而發送失敗的時候,這個時候就拋出異常進行處理將失敗的人物放進隊列中等待再次處理。
異常是為了程式更健壯

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.