Java基礎之淺談異常與瞭解斷言

漁夫會扎蛙發表於2022-04-05

一、產生錯誤原因

  • 使用者輸入錯誤
  • 裝置錯誤
  • 物理限制
  • 程式碼錯誤

二、解決錯誤---異常

  • 在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過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
    ?你的點贊與關注,是我努力前行的無限動力。?

相關文章