您好,登錄后才能下訂單哦!
這篇“如何解決Java異常”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“如何解決Java異常”文章吧。
寫完代碼后請一定要檢查下,代碼中千萬不要有printStackTrace()
。因為printStackTrace()
只會在控制臺上輸出錯誤的堆棧信息,他只適合于用來代碼調試。
真正需要記錄異常,請使用日志記錄。
catch (NoSuchMethodException e) { return null; }
永遠不要不處理異常,而是返回 null,這樣異常就會被吞掉,無法獲取到任何失敗信息,會給日后的問題排查帶來巨大困難。
public void foo() throws Exception { //錯誤做法 }
一定要盡量避免上面的代碼,因為他的調用者完全不知道錯誤的原因到底是什么。
在方法聲明中,可以由方法拋出一些特定受檢異常。如果有多個,那就分別拋出多個,這樣這個方法的使用者才會分別針對每個異常做特定的處理,從而避免發生故障。
public void foo() throws SpecificException1, SpecificException2 { //正確做法 }
catch (NoSuchMethodException e) { throw e; //這代碼一點用都沒有 }
這是一個基本概念,當你能夠處理他時,你再捕獲這個異常,否則永遠都不要捕獲他。
如果你不能在catch
塊中處理它,那么就不要先捕獲再直接拋出,這樣沒有任何意義。
try { someMethod(); } catch (Exception e) { LOGGER.error("method has failed", e); }
以上代碼,最大的問題就是,如果someMethod()
的開發者在里面新增了一個特定的異常,并且預期是調用方能夠特殊的對他進行處理。
但是調用者直接catch
了Exception
類,就會導致永遠無法知道someMethod
的具體變化細節。這久可能導致在運行的過程中在某一個時間點程序崩潰。
這是一個嚴重的問題,因為 Java 中的Error
也可以是Throwable
的子類。但是Error
是 Java 虛擬機本身無法控制的。Java 虛擬機甚至可能不會在出現任何錯誤時請求用戶的catch
子句。
catch (NoSuchMethodException e) { throw new MyServiceException("Some information: " + e.getMessage()); //錯誤做法 }
上面的命令可能會丟失掉主異常的堆棧跟蹤。正確的方法是:
catch (NoSuchMethodException e) { throw new MyServiceException("Some information: " , e); //正確做法 }
catch (NoSuchMethodException e) { LOGGER.error("Some information", e); throw e; }
如上面的代碼所示,拋出和日志記錄可能會在日志文件中產生多個日志消息。
這就會導致同一個問題,卻在日志中有很多不同的錯誤信息,使得開發人員陷入混亂。
try { someMethod(); //拋出 exceptionOne } finally { cleanUp(); //如果在這里再拋出一個異常,那么try中的exceptionOne將會丟失forever }
在上面的例子中,如果someMethod()
拋出一個異常,并且在finally
塊中,cleanUp()
也拋出一個異常,那么初始的exceptionOne
(正確的錯誤異常)將永遠丟失。
try { someMethod(); } finally { cleanUp(); }
這也是一個很好的實踐。如果在你的方法中訪問其他方法,而該方法拋出了異常你不想處理,但是仍然需要做一些清理工作,那么在finally
塊中進行清理。不要使用catch
塊。
以上就是關于“如何解決Java異常”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。