(一)Java中的例外
Java中的例外都來自于java.lang.Throwable類,從例外型別上分,Java中的例外可以分為Exception和Error,Exception例外可以被程式本身處理,Error無法被程式處理,
Exception例外又可以分為受檢查例外和不受檢查例外,所謂受檢查例外是指那些在編程期間就需要把例外try/catch或throws出來的例外,不受檢查例外是指在編程期間不需要通過代碼來顯式地catch出來,我畫了個圖展示例外的型別:

(二)如何處理例外
Error型別的例外屬于盡量去避免而非在代碼里去處理的例外,因此我們在處理例外章節主要介紹Exception型別的例外,
不受檢查例外往往是程式員的代碼邏輯疏忽導致,比如空指標例外,只需要在呼叫物件之前判斷是否是空物件就可避免;下標越界例外只需要保證永遠在下標范圍內訪問即可避免,
受檢查例外必須在代碼中通過try/catch或者throws才能通過編譯,比如下面這段讀取檔案的代碼:
public class ExceptionTest{
public void readFile() throws FileNotFoundException {
FileInputStream fileInputStream=new FileInputStream("xxx.text");
}
}
當使用new FileInputStream(“xxx.text”)獲取檔案時,FileNotFoundException屬于受檢查例外,就必須拋出或者被捕獲,除了throws之外,還可以使用try/catch
public class ExceptionTest{
public void readFile() {
try {
FileInputStream fileInputStream=new FileInputStream("xxx.text");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
}
}
}
(三)try/catch與throws的區別
受檢查例外的捕獲有兩種方式:try/catch和throws,區別在于,try/catch捕獲到例外后直接在catch陳述句塊里進行處理,處理完成之后程式繼續往下執行,而throws則是將例外拋給它的上一級進行處理,程式就不會再往下執行了,
使用catch捕獲到例外之后,我們可以對例外進行處理,常見的方式就是將例外列印出來或者寫入到日志里,下面是Throwable類中的常用方法,
public String getMessage() //回傳例外的簡要資訊
public String getLocalizedMessage() //回傳例外的本地化資訊,默認和getMessage是一樣的,如果要加入本地化資訊往往是子類重寫這個方法
public String toString() //回傳例外的更詳細資訊
public void printStackTrace() //在控制臺輸出例外資訊,
try/catch之后往往還會更finally陳述句塊,finally陳述句塊中的代碼會在程式處理完成最后被執行,不管是否進入例外,如果在代碼塊中有return陳述句,在return執行之前,finally陳述句塊中的代碼會被先執行, finally 陳述句的回傳值將會覆寫原始的回傳值,
(四)自定義例外
除了使用Java自帶的例外之外,我們還可以自己定義一些例外,自定義例外比較簡單,繼承Exception或者RuntimeException,通過構造方法將例外資訊通過super回傳,
public class MyException extends Exception{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
public MyException(String message,Throwable cause){
super(message,cause);
}
public MyException(Throwable cause){
super(cause);
}
}
(五)總結
代碼功力再強大,也有碰到例外的時候,合理作好例外處理可以讓你代碼更穩定,也更容易排查問題,我是魚仔,我們下期再見,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327910.html
標籤:其他
上一篇:阿里大佬全新開源,Android原始碼教科書級特別分享!
下一篇:docker部署kafka
