一、產生錯誤原因
- 使用者輸入錯誤
- 裝置錯誤
- 物理限制
- 程式碼錯誤
二、解決錯誤---異常
- 在Java中異常物件都是派生於Throwable類的一個例項。
- 我們一般將異常分為兩種:①Error和②Exception
- 如果你的程式出現了Error:是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。基本上躺平吧
- 如果你的程式出現了Exception:我們可以通過丟擲異常並捕獲異常來處理。
2.1引起異常的常見問題
派生於RuntimeException的異常包括一下問題:
- 錯誤的強制型別轉換
- 陣列訪問越界
- 訪問null指標
- 出現這些問題,一定是你自己的問題
其它類異常包括:
- 試圖超越檔案末尾繼續讀取資料
- 試圖開啟一個不存在的檔案
- 試圖根據給定的字串查詢Class物件,而這個字串表示的類並不存在。
2.2常見異常處理
- 過程一:“拋”:一旦出現異常,就會在異常程式碼處生成一個對應異常類的物件,並將此物件丟擲。
一旦丟擲物件後,其後的程式碼不在執行。(除非這個異常被捕獲,這樣後面的程式碼可以繼續執行) - 過程二:“抓”:可以理解為異常處理方式:①try-catch-finally(自己解決) ②throws(扔給別人解決)
三、異常的使用
3.1如何丟擲異常
- 首先我們丟擲異常通常使用throws
public class Son {
public void run() throws Exception{
//若程式碼中,出現異常,我們可以將這個異常丟擲,拋給呼叫者去解決這個問題。
//可以一層一層的丟擲,但是終究我們還是要捕獲這個異常,解決問題。
//有時候你也會認為,這是一個極其不負責任的做法。?
}
}
3.2建立異常類(自定義異常)
- 我們需要做的很簡單,定義一個派生於(繼承)Exception的類,或者是Exception的某個子類。
- 自定義異常通常包含兩個構造器,一個是預設構造器,一個是包含詳細描述資訊的構造器。
class 自定義異常類 extends Exception {
public 自定義異常類() {
}
public 自定義異常類(String message) {
super(message);
}
}
public class Son {
int a = 0;
public void sum() throws 自定義異常類 {
if(a < 0)
throw new 自定義異常類("a不能小於0");
}
}
3.3捕獲異常try-catch-finally
public void test() {
try {
//可能存在問題的歧義程式碼
}catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("一定會走的程式碼");
}
}
- 我們先走try裡的程式碼,若遇到了異常,則進入catch,將異常處理後,繼續執行finally語句
- 若try語句中又return語句,我們仍然執行完try後繼續執行finally。
- finally的語句塊一定會被執行。(除非我們沒有正確處理遇到的異常)
- 若try語句塊中沒有任何異常,則跳過catch語句塊。
3.4throw和throws區別
throws:throws關鍵字用來宣告要產生的異常,通常在方法名字後面使用public void run() throws Exception
throw:throw關鍵字通常丟擲異常物件,作用就是丟擲異常。throw new 自定義異常類("a不能小於0");
四、簡單斷言
assert關鍵字:
assert condition;
,assert condition :expression;
- 斷言的作用一般都是debug時候使用,如果 assert x>0;結果為true,程式繼續執行,反之程式直接停止。
- 瞭解即可,我這個層次接觸用的較少。
五、結尾
- 對於異常處理內容就總結這麼多,若想深入學習等待後續更新,基礎部分掌握這些足矣。如果有不足之處,希望大家多多包涵,多多支援。如果有不懂的地方可以直接私信問我,歡迎來訪!
- 我將會繼續更新關於Java的學習知識,感興趣的小夥伴可以關注一下。
- 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
- 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
?你的點贊與關注,是我努力前行的無限動力。?