## 問題 面試官: > try-catch 到底寫在迴圈裡面好,還是外面好? 這個問題,我相信大部分人都會答錯! ## 到底寫在哪裡好? 很多人會說當然寫在迴圈外面好,也有一部分人說寫在迴圈裡面好,其實這兩種回答都不完全對,我們來分析下兩者的弊端。 **try-catch 寫在迴圈外面的弊端:** ...
問題
面試官:
try-catch 到底寫在迴圈裡面好,還是外面好?
這個問題,我相信大部分人都會答錯!
到底寫在哪裡好?
很多人會說當然寫在迴圈外面好,也有一部分人說寫在迴圈裡面好,其實這兩種回答都不完全對,我們來分析下兩者的弊端。
try-catch 寫在迴圈外面的弊端:
try {
for (...){
// 處理邏輯
}
} catch(Exception e) {
...
}
如果 try-catch 寫在迴圈外面,一條數據處理異常,迴圈結束,會導致整個任務的結束,嚴重影響系統效率。
try-catch 寫在迴圈裡面的弊端:
for (...){
try {
// 處理邏輯
} catch(Exception e) {
...
}
}
因為異常處理會影響效率,如果 try-catch 寫在迴圈裡面,會造成過多的、沒有必要的迴圈異常處理,會嚴重影響系統效率。
這一點在阿裡巴巴的《Java開發手冊》異常處理中也有相關提及:
這裡提到了異常的處理效率,確實相對較低,如果迴圈中寫 try-catch,異常不發生或者少發生就還好,如果異常發生較多,系統效率肯定會降低。這個完整版手冊可以關註公眾號Java技術核心,在後臺回覆關鍵字 "手冊" 獲取。
所以,不管寫在哪裡,這個要看實際情況,要結合具體業務再做出具體的選擇的,並不是絕對的寫在哪裡就一定好或者不好。
應用場景
下麵我總結一下兩者的應用場景,歡迎留言補充!
try-catch 適合寫在迴圈外面的場景:
1)一條數據處理異常,需要停止後面的數據處理;
2)不能接受任意數據處理異常,如在事務方法中,需要整體成功或者失敗,這時一條數據處理異常,就需要停止迴圈後面的數據處理,同時需要回滾迴圈中所有已處理過的數據;
try-catch 適合寫在迴圈裡面的場景:
1)一條數據處理異常,不能影響其他數據的處理;
2)能接受少部分的數據處理異常,而不影響整體數據處理;
如果是連接超時異常類,如果要寫在迴圈裡面,可以設置在超過 N 條連接超時後強制退出迴圈,一方面排除了網路波動,服務可能真的出現故障,這時可以避免過多沒有必要的請求超時,待服務恢復後再重試;
總結
目前沒有規範說一定要寫在哪裡比較好,try-catch 寫在迴圈裡面或者外面都可以,上面分析了兩者的弊端和應用場景,我們也可以根據實際業務場景作出選擇。
對於這個面試題,你有什麼想分享的呢?歡迎留言討論~!
好了,今天的分享就到這裡了,後面棧長會分享更多好玩的 Java 技術和最新的技術資訊,關註公眾號Java技術棧第一時間推送,我也將主流 Java 面試題和參考答案都整理好了,在公眾號後臺回覆關鍵字 "面試" 進行刷題。
最後,覺得我的文章對你用收穫的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。
版權聲明: 本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!
覺得不錯,別忘了隨手點贊+轉發哦!