Java學習日記9-異常,Java學習日記9-

來源:互聯網
上載者:User

Java學習日記9-異常,Java學習日記9-

異常(Exception)

一、什麼是異常?

異常就是程式中的錯誤,比如數組越界、訪問null 指標等。在Java中,一切皆對象,異常也不例外。所有的異常都是派生於Throwable類的一個執行個體對象。

二、異常的分類

在異常界,有兩大流派。一派叫Error類,另一派叫Exception類,它們都繼承自Throwable類。在Exception類下還有兩大分支,IOException類和RuntimeException類。

RuntimeException是由程式本身的錯誤導致的異常。

IOException是程式本身沒有問題,但是因為IO發生的錯誤引起的異常。

舉例:

RuntimeException

IOException

數組訪問越界

試圖開啟一個不存在的檔案

訪問null 指標

試圖在檔案尾部讀取資料

錯誤的類型轉換

 

RuntimeException類和它的叔叔Error類比較親,叔侄倆統稱為未檢查異常(unchecked Exception),大白話就是不用你檢查,不用你管的異常。而IOException和它的兄弟和叔叔明顯不是一路的,被稱為已檢查異常(checked Exception),就是你得管它。

 

三、異常處理(Exception handing)

前面說過未檢查異常不用我們管,所以這裡就只說我們怎麼對付已檢查異常。

(1)throws

 首先,你得聲明它。方法應該在其首部用throws+異常名聲明所有可能拋出的異常。

  拋出異常的4中情形:

  1.調用一個拋出已檢查異常的方法。

  2.程式運行過程中發現錯誤,並且利用throws語句拋出已檢查異常

  3.程式出現錯誤,比如數組訪問越界,會自動拋出ArrayIndexOutOfBoundsException

  4.Java虛擬機器和執行階段程式庫出現的內部錯誤

  舉個例子:

1 Class MyAnimation{2     public Image LoadImage(String s)throws IOException, EOFException3     {4     ......5     }6 }

(2)用throw關鍵字拋出異常

 1 String readData(Scanner in)throws EOFException{ 2     ... 3     while(...){ 4         if(!in.hasNext()) 5         { 6             if(n<len) 7             throw new EOFException(); 8         } 9     }10 }        

(3)自訂異常

當java提供的異常滿足不了需要的時候,可以自己DIY一個

 1 //定義一個FileFormatException類 2 class FileFormatException extends IOException{ 3     public FileFormatException(){} 4     public FileFormatException(String gripe){ 5         super(gripe); 6     } 7 } 8 //下面拋出自訂異常 9 String readData(Scanner in)throws EOFException10 {11     ...12     while(...){13         if(ch == -1){14             if(n<len)15             throw new FileFormatException();16         }17     }18     return s;19 }    

(4)捕獲異常

光把異常拋出去,不能不管啊,所以就得捕獲它並處理它。

1 //利用try-catch語句塊捕獲異常2 try{3     code4 }5 catch(ExceptionType e){6     handler for this type7 }

  如果在try語句塊中的代碼拋出了一個在catch子句中說明的異常類,那麼

  1)程式將跳過try語句塊的其他代碼。

  2)程式將執行catch子句中的處理器代碼

(5)異常-方法內外

  對於異常,可以在方法內部用try-catch語句塊來捕獲並處理,如果不想在方法內處理,可以在方法首部聲明可能拋出的異常,將異常可能拋出的異常交給調用方法的代碼去處理。總之,就是方法內用try-catch處理,方法外用throws拋出。

(6)捕獲多個異常

1 try{2     code3 }4 catch(FileNotFoundException | UnknowHostException e){5     ...6 }7 catch(IOException e){8     ...9 }

(7)finally

1 try{2     ...3 }4 catch(IOException e){5     ...6 }7 finally{8     ...9 }

不管有沒有異常發生,finally語句塊中的代碼都將執行。

try-catch、try-catch-finally、try-finally三種組合,1、3組合更常用

(8)帶資源的try語句塊

帶資源的try塊在退出時,會自動關閉資源,這樣往往就可以省掉finally語句 

1 try(Scanner in = new Scanner(new FileInputStream(“檔案路徑”))){2     while(in.hasNext())3     System.out.println(in.next());4 }

 註:╮(╯▽╰)╭本文大量參考《Java核心技術 卷I》

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.