国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java學習日記9-異常

2019-11-14 15:00:12
字體:
來源:轉載
供稿:網友

異常(Exception)

一、什么是異常?

異常就是程序中的錯誤,比如數組越界、訪問空指針等。在java中,一切皆對象,異常也不例外。所有的異常都是派生于Throwable類的一個實例對象。

二、異常的分類

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

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

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

舉例:

RuntimeException(unchecked)

IOException(checked)

數組訪問越界

試圖打開一個不存在的文件

訪問空指針

試圖在文件尾部讀取數據

錯誤的類型轉換

 

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

 

三、異常處理(Exception handing)

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

1throws

 首先,你得聲明它。方法應該在其首部用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-catchtry-catch-finallytry-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》

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐津县| 太湖县| 东兴市| 峨眉山市| 宜丰县| 杭锦后旗| 安达市| 谢通门县| 昭苏县| 大连市| 新建县| 临桂县| 紫金县| 彰化市| 奉化市| 江城| 五指山市| 开封县| 谷城县| 手机| 乐平市| 丰顺县| 黔西| 庐江县| 柳江县| 上蔡县| 拉孜县| 鸡泽县| 抚远县| 绩溪县| 龙游县| 张家口市| 深州市| 伊吾县| 沂水县| 交口县| 昌邑市| 海口市| 康马县| 潼关县| 临安市|