異常
概念:什么是異常
異常就是程序運行時,發(fā)生的不被期望的事件,它阻止了程序按照程序員的預(yù)期正常執(zhí)行;如果異常沒有被處理,程序?qū)钦5慕K止
注意:開發(fā)過程中的語法錯誤和邏輯錯誤不是異常
異常是一種對象,通過類進行定義,其根類是java.lang.Throwable
異常發(fā)生的原因有很多,通常包含以下幾大類:
-
用戶輸入了非法數(shù)據(jù)。
-
要打開的文件不存在。
-
網(wǎng)絡(luò)通信時連接中斷,或者 JVM 內(nèi)存溢出。
這些異常有的是因為用戶錯誤引起,有的是程序錯誤引起的,還有其它一些是因為物理錯誤引起的。
異常的分類

1、錯誤(Error):是JVM拋出的,代表系統(tǒng)內(nèi)部錯誤,無法解決。如:StackOverflowError(棧溢出)、LinkageError()、VirtualMachineError()等等
2、Exception:
①檢查性異常:其它因編程錯誤或偶然的外在因素導(dǎo)致的一般性問題,可以使用針對性的代碼進行處理。又分成編譯時異常,如:
IOException\ClassNotSupportedException\CloneNotSupportedException等等
②運行時異常:runtimeexception(非檢查異常), 運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。如:
ArithmeticException、InputMismatchException、ClassCastException、NullpointException等等
異常方法

異常處理機制
異常處理機制能讓程序在異常發(fā)生時,按照代碼的預(yù)先設(shè)定的異常處理邏輯,針對性地處理異常,讓程序盡最大可能恢復(fù)正常并繼續(xù)執(zhí)行,且保持代碼的清晰。
處理方式:
①使用try...catch...finally語句塊捕獲異常并處理
②在函數(shù)簽名中使用throws 聲明交給函數(shù)調(diào)用者去解決
③在方法內(nèi)部通過throw拋出異常對象
注意:throw語句用在方法體內(nèi),表示拋出異常,由方法體內(nèi)的語句處理。
throws出現(xiàn)在方法函數(shù)頭,表示在拋出異常,由該方法的調(diào)用者來處理。
編譯時期異常和運行時期異常的區(qū)別
編譯時期異常:在編寫程序時發(fā)生的,從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。
運行時期異常:一般由程序邏輯錯誤引起,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生,是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。
finally關(guān)鍵字的特點
無論是否發(fā)生異常,都無條件執(zhí)行的語句
注意事項:
-
catch 不能獨立于 try 存在。
-
在 try/catch 后面添加 finally 塊并非強制性要求的。
-
try 代碼后不能既沒 catch 塊也沒 finally 塊。
-
try, catch, finally 塊之間不能添加任何代碼。
自定義異常
在 Java 中你可以自定義異常。編寫自己的異常類時需要記住下面的幾點。
-
所有異常都必須是 Throwable 的子類。
-
如果希望寫一個檢查性異常類,則需要繼承 Exception 類。
-
如果你想寫一個運行時異常類,那么需要繼承 RuntimeException 類。
可以像下面這樣定義自己的異常類:
class MyException extends Exception{
}
只繼承 Exception 類來創(chuàng)建的異常類是檢查性異常類。
一個異常類和其它任何類一樣,包含有變量和方法。
浙公網(wǎng)安備 33010602011771號