Java 異常處理筆記

來源:互聯網
上載者:User

標籤:

Java程式運行過程中所發生的例外狀況事件可分為兩類:

§錯誤(Error):JVM系統內部錯誤、資源耗盡等嚴重情況§違例(Exception): 其它因編程錯誤或偶然的外在因素導致的一般性問題,例如:    –對負數開平方根    –null 指標訪問    –試圖讀取不存在的檔案    –網路連接中斷例:
public class ExceptionTest01{           public static void main(String[] args) {          String friends[]={"lisa","bily","kessy"};          for(int i=0;i<5;i++)  {                   System.out.println(friends[i]);             }        System.out.println("\nthis is the end");      }}

public class ExceptionTest02 {          public static void main(String[] args){          String user[] = {"lilei","lucy","lisa"};          try{              for(int i=0; i<5; i++) {                  System.out.println(user[i]);              }                            }catch(java.lang.ArrayIndexOutOfBoundsException  e){                      System.out.println("異常:" + e.getMessage());              }                                            System.out.println("程式結束!");          }    }

 

 

 

 

異常處理塊的一般形式

try{      // 要監控錯誤的代碼塊    methodGeneratingException();} catch (Exception e) {     // Exception e 的例外處理常式} finally{     // 在 try 結束前要執行的代碼塊   cleanup();}

 

•Throwable 具有兩個子類,它們是–Exception:處理使用者程式應當捕獲的異常情況–Error:Error 類的異常為內部錯誤,因此在正常情況下不期望使用者的程式捕獲它們 

常見  異常類 

§RuntimeException–錯誤的類型轉換–數組下標越界–null 指標訪問§IOExeption–從一個不存在的檔案中讀取資料–越過檔案結尾繼續讀取–串連一個不存在的URL

 

捕獲異常

  捕獲異常是通過try-catch-finally語句實現的。

 

try{  ......  //可能產生異常的代碼}catch( ExceptionName1 e ){  ......  //當產生ExceptionName1型異常時的處置措施}catch( ExceptionName2 e ){......    //當產生ExceptionName2型異常時的處置措施}  {finally{......   //無條件執行的語句  }  }

 

§try

  捕獲異常的第一步是用try{…}語句塊選定捕獲異常的範圍。

§catch

  在catch語句塊中是對異常對象進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用於處理可能產生的不同類型的異常對象。與其它對象一樣,可以訪問一個異常對象的成員變數或調用它的方法。

–getMessage( ) 方法,用來得到有關例外狀況事件的資訊–printStackTrace( )用來跟蹤例外狀況事件發生時執行堆棧的內容。當使用多重catch的時候  越外面的 層級越高 如:
    try { …… }    catch(ClassCastException ex){ …… }    catch(NumberFormatException ex){ …… }    catch(Exception ex){ …… }  // 此句必須放在最後!

 

 §finally–捕獲異常的最後一步是通過finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程式的其它部分以前,能夠對程式的狀態作統一的管理。不論在try代碼塊中是否發生了例外狀況事件,finally塊中的語句都會被執行。–finally語句是任選的 
  try {        startFaucet();        waterLawn();     }  catch (BrokenPipeException e){        logProblem();        }    finally {        stopFaucet();        } 

 

 聲明拋棄異常

§聲明拋棄異常是Java中處理異常的第二種方式–如果一個方法(中的語句執行時)可能產生某種異常,但是並不能確定如何處理這種異常,則此方法應聲明拋棄異常,表明該方法將不對這些異常進行處理,而由該方法的調用者負責處理
public void readFile(String file)     throws IOException {        ……        // 讀檔案的操作可能產生IOException類型的異常        FileInputStream fis = new FileInputStream(file);         ..……     }

 

重寫方法聲明拋棄異常原則

•重寫方法不能拋出比被重寫方法範圍更大的異常類型
    public class A {     public void methodA() throws IOException {           ……     }    }    public class B1 extends TestA {     public void methodA() throws FileNotFoundException {           ……     }    }    public class B2 extends TestA {     public void methodA() throws Exception {             ……        }    }

人工拋出異常

§Java異常類對象除在程式執行過程中出現異常時 由系統自動生成並拋出,也可根據需 要人工建立並拋出–首先要產生異常對象,然後通過throw語句實現拋出操作(提交給Java運行環境)。

IOException e =new IOException();

throw e;

–可以拋出的異常必須是Throwable或其子類的執行個體。下面的語句在編譯時間將會產生語法錯誤:

            throw new String("want to throw");

 

•使用者自訂異常類MyException,用於描述資料取值範圍錯誤資訊:
class MyException extends Exception {       private int idnumber;     public MyException(String message, int id) {        super(message);        this.idnumber = id;     }     public int getId() {        return idnumber;     }}

 使用者自訂異常類

public class ExceptionTest05{        public void regist(int num) throws MyException {     if (num < 0) {               throw new MyException("人數為負值,不合理",3);         }    System.out.println("登記人數" + num);        }        public void manager() {     try {               regist(100);     } catch (MyException e) {                System.out.print("登記失敗,出錯種類"+e.getId()));             }    System.out.print("本次登記操作結束");       }       public static void main(String args[]){     ExceptionTest05 t = new ExceptionTest05();    t.manager();       }}

 

 

•異常是運行時發生的錯誤•可以使用 try、catch、throw、throws 和 finally 來管理 Java 異常處理。要監控的程式語句包含在 try 塊內catch 塊中的代碼用於捕獲和處理異常。在方法返回之前絕對必須執行的代碼應放置在 finally 塊中•要手動引發異常,使用關鍵字 throw。任何被拋到方法外部的異常都必須用 throws 子句指定•多重catch 和嵌套try-catch的使用•自訂異常的編寫和使用 

 

Java 異常處理筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.