Java——異常處理

來源:互聯網
上載者:User

標籤:

【異常】

 <1>運行期出現的錯誤(不是編譯時間的語法錯誤)。 <2>觀察錯誤的名字和行號很重要! 【程式分析:數組越界】  int [] arr = {1,2,3};  System.out.println(arr[4]);  註:在C和C++中編譯通過,因為在C和C++中不進行數組越界的檢查(這就很容易造成緩衝區溢位漏洞)。         Java可以檢查數組下標是否越界,但是有一定的檢查範圍。  報錯:Exception in thread ‘main‘ java.lang.ArrayIndexOutOfBoundsException: 4[出錯的下標]at ***(出錯位置)            ----數組下標越界 【程式分析:分母為0】  System.out.println(2/0);  報錯:Exception in thread ‘main‘ java.lang.ArithmaticException: by zero at ***  解決:捕獲異常  try{        System.out.println(2/0);   }catch(ArithmaticException ae){             //Java程式在出錯時,ae對象是可以直接使用的,以內預設情況下已經初始化         System.out.println("系統維護中...");            //這是很多網站常用的提示,因此持續重新整理並不能解決問題         ae.printStackTrace();            //這是常用的解決方式,即把錯誤的堆棧資訊列印出來(把引起錯誤的所有資訊列印,這樣便於程式員進行調試)  }   【程式】 <1>查看API文檔可知,每種方法都會有對應的Exception,意在提醒使用者在使用該方法時要格外注意該異常的出現,可以使用 throw Exception語句解決;還有一種異常直接在方法聲明中就給出,例如public int read() throws IOException{}。<2>在方法定義時,使用throws關鍵字拋出可能的異常;在調用該方法時,使用try-catch語句捕獲異常。<3>throw的用法:       void A(int i) throws ArithmaticException{               if(i==0){                    throw new ArithmaticException("被除數不能為0");                    //這相當於一個錯誤列印語句               }         }  【異常分類】  <1>所有的異常均來自這樣一個類:Throwable(java.lang.Throwable其有兩個子類--Error、Exception)。<2>Exception是可以初始化的異常,其中還有一個比較特殊的異常:RuntimeException。<3>Throwable意為"可拋出的",只要從該類繼承的對象,都是可以拋出異常。<4>Error是系統級錯誤,即虛擬機器錯誤,我們使用者無法處理;Exception可以由使用者處理。<5>RuntimeException是經常出現的錯誤,可以不進行處理;另外一種Exception(不是運行時的Exception)必須進行捕獲並處理(JDK中有些方法後面直接寫出throws的即代表必須處理的異常)。  【Exception分類】  
【finally】  工作原理:  存在的必要性:如果前面執行開啟檔案操作,當操作出錯時,對應的代碼不會繼續執行,但是我們必須要把開啟的檔案關閉,這段代碼就需要放置在finally代碼塊中。 【try】  【catch】  【finally】  樣本程式:  【異常的拋出和處理】 程式:void f() throws FileNotFoundException,IOException{     //比較嚴格的是拋出多種可能的異常,可以根據實際捕獲的異常作出不同的處理     FileInputStream in = new FileInputStream("**.txt");     int b;     b = in.read();     while(b == -1){             System.out.println((char)b);             b = in.read();      }  }  void f2(){        try{              f();         catch(FileNotFoundException e){                  e.getMessage();        //必須要對Exception作出相應的處理,否則就相當於把Exception認為吞併了         }catch(IOException e){                  e.printStackTrace();         }     }}  void f2() throws IOException{         f();  }//捕獲異常後不知道怎麼處理,可採用上述方法。註:如果任何異常都不想處理,也可以在main函數上直接拋出異常,這時拋出的異常是交給Java運行系統。除了在做測試意外,實際編程中不要在main函數中拋出異常。   【Exception舉例】 註:這裡要特別注意出錯的行號(極其重要--說明哪個方法在哪個地方出的錯),這時往往是由於其中一個地方錯誤引起的。  註:Exception應該放在後面,不能置於其子類的前面。報錯:已捕獲到異常 java.io.FileNotFoundException ****  【自訂異常】 在實際項目中往往需要自己定義需要的異常類,從已存在的類(RuntimeException等)繼承即可。 步驟: 【舉例】   【注意】 註:<1>第一個拋出的異常類型和原來的不一致,應該為IOException。       <2>第二個拋出的範圍大了(範圍大了小了都不可以)。       <3>第三個不拋異常可以重寫方法。       <4>第四個拋出異常多了。                                                                                         

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.