java 异常 最佳实践_处理Java异常的10种最佳实践
java 異常 最佳實(shí)踐
在本文中,我們將看到處理Java異常的最佳實(shí)踐。 用Java處理異常不是一件容易的事,因?yàn)樾率趾茈y理解,甚至專(zhuān)業(yè)的開(kāi)發(fā)人員也可能浪費(fèi)時(shí)間討論應(yīng)該拋出或處理哪些Java異常。 因此,最大的開(kāi)發(fā)公司對(duì)如何使用它們有一套規(guī)則。
如果您是公司的新手,那么Java異常處理中各種狀態(tài)的呈現(xiàn)方式可能會(huì)讓您感到震驚。 本文將向您展示最重要的十個(gè)方面,您可以用來(lái)入門(mén)或改善異常處理。 異常是程序執(zhí)行期間的異常情況。 因此,讓我們討論處理Java異常的最佳實(shí)踐。
1.處理Java異常的最佳實(shí)踐
1.1永遠(yuǎn)不要在catch塊中使用異常
catch (NoSuchMethodException e) {return null; }永遠(yuǎn)不要返回“ null”而不是處理異常,它會(huì)消耗異常并永久使錯(cuò)誤失敗。 如果您不了解失敗的原因,那么將來(lái)就無(wú)法阻止自己。
1.2聲明您的方法可能拋出的特定檢查異常
public void foo() throws Exception { //Incorrect way }始終嘗試避免上面的代碼,因?yàn)樗赡芡耆鲇趽碛幸褭z查異常的目的而造成缺陷。 有必要聲明該方法可能引發(fā)的特定檢查異常。 如果用戶(hù)有許多已檢查的異常,則用戶(hù)必須將其覆蓋在用戶(hù)的異常中,并將信息附加到異常消息中,否則用戶(hù)也可以使用代碼重構(gòu)。
public void foo() throws SpecificException1, SpecificException2 { //Correct way }1.3不要獲取異常類(lèi),而是捕獲特定的子類(lèi)
try {someMethod(); } catch (Exception e) { LOGGER.error("method has failed", e); }獲取異常的主要問(wèn)題是,如果用戶(hù)稍后調(diào)用的方法將新檢查的異常附加到其設(shè)計(jì)簽名中,則開(kāi)發(fā)人員希望用戶(hù)必須處理特定的新異常。 如果用戶(hù)的代碼出現(xiàn)異常,它將永遠(yuǎn)無(wú)法理解該變化。 用戶(hù)的代碼錯(cuò)誤,并且可能在運(yùn)行時(shí)的某個(gè)時(shí)間點(diǎn)崩潰。
1.4永遠(yuǎn)不要上任何Throwable類(lèi)
這是一個(gè)嚴(yán)重的問(wèn)題,因?yàn)镴ava錯(cuò)誤也可以是Throwable的子類(lèi)。 錯(cuò)誤是不可更改的條件,無(wú)法由Java虛擬機(jī)本身控制。 Java虛擬機(jī)甚至可能在任何錯(cuò)誤時(shí)都不請(qǐng)求用戶(hù)的catch子句。
1.5始終準(zhǔn)確地覆蓋自定義異常中的異常,以免丟失堆棧跟蹤
catch (NoSuchMethodException e) { throw new MyServiceException("Some information: " + e.getMessage()); //Incorrect way }上面的命令可能會(huì)損壞主要異常的堆棧跟蹤,并且總是錯(cuò)誤的。 正確的方法是:
catch (NoSuchMethodException e) {throw new MyServiceException("Some information: " , e); //Correct way }1.6記錄異常或拋出異常,但不要同時(shí)執(zhí)行
catch (NoSuchMethodException e) {LOGGER.error("Some information", e);throw e; }如上面的代碼所示,拋出和記錄可能會(huì)在日志文件中導(dǎo)致多個(gè)日志消息。 對(duì)于試圖瀏覽各種日志的開(kāi)發(fā)人員,代碼中的單個(gè)問(wèn)題可能會(huì)造成最壞的情況。
1.7永遠(yuǎn)不要從finally塊拋出異常
try {someMethod(); //Throws exceptionOne }finally {cleanUp(); //If finally also threw an exception the exceptionOne will be lost forever }準(zhǔn)確地說(shuō),高達(dá)cleanUp()永遠(yuǎn)不會(huì)引發(fā)異常。 在上述情況下,如果someMethod()引發(fā)異常,并且在finally塊中,cleanUp()引發(fā)異常,則該方法之外的其他異常將消失,原始的第一個(gè)異常(正確的原因)將永遠(yuǎn)消失。
1.8始終僅捕獲那些可以處理的異常
catch (NoSuchMethodException e) { throw e; //Avoid this as it doesn't help anything }這是一個(gè)必不可少的概念,從不捕獲任何異常,因此僅在可以處理任何異常的情況下捕獲任何異常,才可以在該異常中提供其他上下文數(shù)據(jù)。 如果您不能在catch塊中處理它,那么最好的建議是不要僅將其重新拋出就捕獲它。
1.9不要使用printStackTrace()語(yǔ)句
完成代碼后,切勿離開(kāi)printStackTrace()。 很有可能是您的同事之一,他們最終將獲得其中的堆棧跟蹤信息,并且對(duì)其處理方式的知識(shí)完全為零,因?yàn)樗粫?huì)附加任何上下文信息。
1.10如果您不打算處理異常,請(qǐng)使用finally塊而不是catch塊
try {someMethod(); //Method 2 } finally {cleanUp(); //do cleanup here }這也是一個(gè)好習(xí)慣。 如果在您的方法內(nèi)部訪(fǎng)問(wèn)某個(gè)方法2,并且方法2引發(fā)一些您不想在方法1中處理的異常,但是仍然希望進(jìn)行某些清除以防萬(wàn)一發(fā)生異常,那么請(qǐng)?jiān)趂inally塊中執(zhí)行此清除。 不要使用擋塊。
正如我們所討論的,java異常處理是必不可少的,并且有多種實(shí)踐可以毫無(wú)問(wèn)題地處理它們。 圖片中出現(xiàn)的最新VPN應(yīng)用漏洞是Google從其平臺(tái)上刪除了一些最佳VPN。 根據(jù)研究人員的說(shuō)法,它具有支持中間人(MITM)攻擊的危險(xiǎn)漏洞,因此它僅允許黑客阻止提供商與用戶(hù)之間的通信。 甚至將所有用戶(hù)重定向到黑客的邪惡服務(wù)器,而不是真正的VPN服務(wù)器。 因此,谷歌刪除了它們,以保護(hù)用戶(hù)免受漏洞侵害。 Google確認(rèn)這種類(lèi)型的漏洞仍然存在,研究人員通過(guò)Google Play安全獎(jiǎng)勵(lì)計(jì)劃(GPSRP)發(fā)布了結(jié)論。 GPSRP使安全分析人員可以發(fā)現(xiàn)安裝次數(shù)超過(guò)1億次的應(yīng)用程序的漏洞。
2.結(jié)論
本文可幫助您獲得有關(guān)處理Java異常的最佳實(shí)踐的完整知識(shí)。 完全了解它是必不可少的,因?yàn)?#xff0c;正如我們所討論的,對(duì)于初學(xué)者和有經(jīng)驗(yàn)的開(kāi)發(fā)人員而言,這個(gè)主題都很難。
我們還討論了google和頂級(jí)VPN應(yīng)用之間的問(wèn)題,即Google從其下載平臺(tái)中刪除了許多VPN,并提供了有關(guān)VPN應(yīng)用漏洞問(wèn)題的完整信息。
翻譯自: https://www.javacodegeeks.com/10-best-practices-to-handle-java-exceptions.html
java 異常 最佳實(shí)踐
總結(jié)
以上是生活随笔為你收集整理的java 异常 最佳实践_处理Java异常的10种最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: //rest风格写_REST /使用提要
- 下一篇: java插入排序_Java程序要插入排序