Java异常简单介绍
本文收錄在豬哥GitHub:https://github.com/pig6/Java 中,本項目收集一線大廠面試、實戰、Java學習路線等。
一、異常產生的原理
JVM針對程序運行監測出的異常創建個異常對象,對象包含了異常產生的:內容、原因、位置。根據程序邏輯將異常對象層層拋出或者處理。
二、Throwable體系
1.Error
錯誤Error一般是指java虛擬機相關的問題,如系統崩潰、虛擬機出錯誤、動態鏈接失敗等,這種錯誤無法恢復或不可能捕獲,將導致應用程序中斷,通常應用程序無法處理這些錯誤,因此應用程序不應該捕獲Error對象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。
- OutOfMemoryError
- StackOverflowError
- NoClassDefFoundError
- NoSuchMethodError
2.Exception
1> 運行時異常 RuntimeException:是指“可以避免的異常”,如 null引用異常,這類異常都是由程序內部原因造成的,是可以避免的,考驗開發的嚴謹性,因此這個問題是我們作為一名開發必須要避免發生的,再大的公司每年總會有幾次事故是因為NPE導致的,我們如果因為這種問題被通報了就是很尷尬的事情了(對生產環境一定要有足夠的敬畏心啊)。
常見的運行時異常有以下幾種:
- NullPointerException
- ClassCastExecption
- ArithmeticException
- IndexOutOfBoundsException
- ClassNotFoundException
2> 非運行時異常:代表“無法避免的異常” 如io異常,往往這類異常是由于外部原因造成的,程序本身無法保證他們不發生,所以這類異常必須捕獲,這就是我們在使用io資源或者操作線程比如sleep的時候必須要捕獲或者拋出的原因。
常見的有:
- IOException
- InterruptedException
- SQLException
- 自定義的非RuntimeException
3.Check And UnCheck
1>CheckedException:等價于非運行時異常,要么捕獲,要么拋出,否則編譯無法通過。代表“無法避免的異?!?如io異常 往往這類異常是由于外部原因造成的,程序本身無法保證他們不發生
2>UnCheckedException:包括:Error&運行時異常
三、方法
- toString:異常類信息+異常信息描述
- getMessage:異常信息描述
- printStackTrace:最常用打印完整的錯誤堆棧信息
四、catch還是throw
通常應該捕獲那些知道如何處理的異常,而將那些不知道如何處理的異常進行傳遞。如果想傳遞一個異常,就必須在方法的聲明中添加一個throws說明符,以便告知調用者這個方法可能會拋出異常。
五、finally
六、其他
- 不要丟棄異常,捕獲異常后需要進行相關處理。如果用戶覺得不能很好地處理該異常,就讓它繼續傳播,傳到別的地方去處理,或者把一個低級的異常轉換成應用級的異常,重新拋出
- catch語句應該指定具體的異常類型。不能把不該捕獲的異常也捕獲了
- 在finally里面釋放資源。如果finally里面也會拋出異常,也一樣需要使用try…catch處理
- 不要把大量的代碼塞在try…catch塊里面,分離各個可能出現異常的語句并分別捕獲異常
遺留問題: 編碼中是該捕獲Exception還是Throwable呢?歡迎評論區交流!!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java异常简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网大厂必学技能:压力测试!
- 下一篇: java美元兑换,(Java实现) 美元