1. 程式人生 > >Java開發知識之Java的異常處理

Java開發知識之Java的異常處理

ssa run 範圍 com 行處理 意思 操作 spa exce

      Java開發知識之Java的異常處理

一丶異常概述

  在講解異常之前,我們要搞清楚.什麽是異常. 通俗理解就是我們編寫的程序出問題了.進行處理的一種手段.

比如我們的QQ.有的時候就崩潰了.比如出現xxx錯誤.讓你上報錯誤信息什麽的. 意思就是 QQ的代碼不能運行了.

但是,直接崩潰又不好看.對用戶不好. 所以就用異常處理接受. 我彈出一個錯誤框.告訴你已經錯誤了.代碼不能運行了.讓你上傳或者重新啟動. 異常做的事情就是這樣.只能這樣做最後的一點事情.但是了解一下還是必須的.

  1.異常說明

  異常主要作用: 代碼超出了程序員可控範圍. 如用戶的數據出錯.導致程序出錯. 或者打開文件的時候.也會出錯.在程序中可能出現的這種錯誤.我們都稱之為異常.在C++ 中一樣有異常處理. 如果是底層.那麽會更復雜.在匯編的角度來說.

  2.Java中的異常.

在程序編程中. 我們不能 除0. 除0就會有異常,在C++中內存訪問異常就是C0005; 我們可以編寫代碼,告訴大家什麽是異常.

public class JavaMain {


    public static void main(String[] args) {
        
        int Number = 10;
        int NumberCount = 10 / 0;
        
    }

}

運行結果

技術分享圖片

這一串英文可以翻譯為:

  異常 在線程 main中. java.lang.ArithemeticExeception 接受的 / 除 0 錯誤. 在 man函數的第16行位置.

可以準確的輸出.這個就是異常.異常一旦處理.代表了其程序已經不能執行了.不過你可以接受異常對其進行處理.比如我輸出一段話.

二丶異常的捕獲與處理

  1.異常處理 try catch

  我們上邊說過. 當異常產生的時候.我們可以進行處理.

語法:

  try{
         會出現的異常代碼.
  }
  catch(Exception e){
             異常出現後我們進行捕獲.
    
            進行你自己的操作.比如輸出一段話.
  }        
    catch(Exception a){
           .....
    }

代碼如下:

  

public static void main(String[] args) {
        try {
            int Number = 10;
            int NumberCount = 10 / 0;
        }
        catch(Exception e) {
            String Error = e.getMessage();
            e.printStackTrace();
        }
        
        
    }

我們捕獲了異常. 任何異常都可以使用 Exception這個對象的引用來接受. 這個類就相當於異常的全局父類. 任何異常處理類都繼承它.所以可以用它接受一下.並且調用方法.輸出錯誤.

輸出結果:

  技術分享圖片

註意: 如果我們使用的try語句中.有代碼出現了異常.那麽會去尋找對應的Catch語句進行處理.但是如果我們catch語句不輸出結果.或者不加代碼.那麽可能程序就與你的預期不對.因為以前不使用的時候.出了異常我們知道哪裏錯誤了.

但是現在你自己處理catch不輸出錯誤.這樣就會造成一種假象就是我的程序沒有出錯.但是為什麽運行結果不對. 因為已經除了異常了.但是你沒有進行處理而已.

  2.異常處理語句 try catch finally

在C++中,標準的異常處理就是try catch .java中也可以這樣做.

但是此時可能遇到一個問題.如果我們已經知道出現異常了.但是想要釋放資源怎麽辦.所以使用另一種 java的處理語句

語法;

  

try{
}
catch(Exception e){
}
finally{
}

finally的作用就是,不過try catch語句怎麽執行.最終都會執行finally語句的.

執行流程:

  try捕獲異常. 交給 catch處理. catch處理完了. 指向finally語句.

三丶Java中的常見處理類.

  技術分享圖片

技術分享圖片

例如上面的我們 除0異常.就是算數異常.我們可以使用此類進行接收.

四丶自定義異常與異常拋出

   用戶可以自定義異常.並且出現了異常.可以拋出這個異常.

  1.繼承父類 Exception 類.

  2.使用throw語句. 方法上使用throws語句.

1.繼承父類.

  

public class MyException extends Exception {

    public MyException() {
        // TODO 自動生成的構造函數存根
    }

    public MyException(String message) {
        super(message);
        // TODO 自動生成的構造函數存根
    }

    public MyException(Throwable cause) {
        super(cause);
        // TODO 自動生成的構造函數存根
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
        // TODO 自動生成的構造函數存根
    }

    public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
        // TODO 自動生成的構造函數存根
    }

}

我們可以只實現一個構造. 不過我使用的Exception進行繼承的.它會自動重寫父類的信息.

此時我們就有了一個異常類. 叫做MyException類.

2.創建方法.拋出自定義異常.

  我們創建一個類.這個類中創建一個方法.方法裏面是處0錯誤.我們自定義處理.

public class MyTest {

    public MyTest() {
        // TODO 自動生成的構造函數存根
    }
    public static void ExceptionRun()throws MyException{
        try {
            int a = 10;
            int b = 11;
            if ((a + b) >= 21) {
                throw new MyException("數字大了");
            }
            
        }
        catch (MyException a) {
            System.out.println(a.toString());
        }
    }

}

1.我們方法中寫了程序. 如果 數字 > 21.我們就拋出異常.如果我們有catch語句接受.則進行輸出了. catch語句的類就是我們的異常類. 也可以是它的父類.

2.方法上加了 throws.意思就是說. 如果這個方法出了異常.且catch語句中並沒有捕獲到.那麽就會上層進行異常捕獲.也就是說上層需要加上try catch 來使用這個方法.

如果上層不使用. 那麽上層函數繼續使用throws進行拋出. 如果都沒有處理.則Java自動進行處理.直到程序出錯.

如下:

技術分享圖片

我們的上層函數調用位置.並沒有使用try catch進行捕獲.繼續拋出了.

throw: 這個主要用於拋出異常對象.一旦程序遇到throw則代碼不會繼續執行了.

throws: 用在方法中. 主要是當前方法沒有捕獲異常.就會拋出.讓上一層進行接收.

五丶異常跟錯誤的區別.

  Java中有運行時異常. 我們上面所說的Exception 是所有異常的"父類" 針對的是異常.其實它也是一個子類. 而它的父類派生出了錯誤類 Error 跟 異常類 (Exception)而已.

流程圖:

技術分享圖片

異常跟錯誤:

  異常指的就是程序出問題了.不過還可以補救.錯誤就是你代碼都寫錯了.程序都不能運行. 或者這類錯誤很嚴重.會直接消耗進系統資源.造成無法挽回的損失.

六丶總結

  1.異常的所有父類 Exception接受.

  2.異常語法 : try catch(異常類. 引用) try catch(異常類,異常引用) finally

  3.自定義異常繼承 Exception即可. 使用throw拋出.

  4.throw語句拋出異常引用對象.catch中接受我們的異常. throws用於方法.代表當前方法並沒有捕獲到異常.傳遞給上一層進行處理.上一層調用trycatch如果不調用繼續throws. thrwos可以拋出多個異常.

  5.異常跟錯誤.  

    1.異常 exception 非嚴重性的.

    2.錯誤:: error 嚴重性的.

Java開發知識之Java的異常處理