Java學習心得之異常處理
阿新 • • 發佈:2019-02-06
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestException { /** * 任何方法往外拋能處理的異常的時候都有一種簡單的寫法:“throws Exception”, * 因為Exception類是所有能處理的異常類的根基類,因此丟擲Exception類就會丟擲所有能夠被處理的異常類裡了。 * 使用“throws Exception”丟擲所有能被處理的異常之後,這些被丟擲來的異常就是交給JAVA執行時系統處理了, * 而處理的方法是把這些異常的相關錯誤堆疊資訊全部打印出來。 * @throws Exception */ void fn() throws Exception { } /** * 在知道異常的型別以後,方法宣告時使用throws把異常往外拋 * @param i * @throws ArithmeticException */ void m1(int i) throws ArithmeticException { } void m2(int i) { if (i == 0) { //這種做法就是手動丟擲異常,使用“throw+new出來的異常物件”就可以把這個異常物件丟擲去了。 //這裡是new了一個異常物件,在構建這個物件的時候還可以指定他相關的資訊,如這裡指明瞭異常資訊“i不能等於0” //這個物件丟擲去的時候使用getMessage()方法拿到的就是“i不能等於0”這種資訊。 throw new ArithmeticException("i不能等於0"); } } /** * 正常情況下如果這裡不寫try……catch語句那麼程式編譯時一定會報錯, * 因為這裡有可能會產生兩個個必須要處理的異常:FileNotFoundException和IOException。 * 但由於在宣告方法f()時已經使用throws把可能產生的這兩個異常丟擲了, * 所以這裡可以不寫try……catch語句去處理可能會產生的異常。 * f()方法把丟擲的異常交給下一個要呼叫它的方法去處理 * @throws FileNotFoundException * @throws IOException */ void f() throws FileNotFoundException, IOException { //這裡有可能會產生FileNotFoundException異常 FileInputStream fis = new FileInputStream("MyFile.txt"); //這裡有可能會產生IOException異常 int b = fis.read(); while (b != -1) { System.out.println((char)b); b = fis.read(); } } /** * 在f2()方法裡面呼叫f()方法時必須要處理f()方法丟擲來的異常, * 當然,如果f2()方法也沒有辦法處理f()方法丟擲來的異常,那麼f2()方法也可以使用throws把異常丟擲, * 交給下一個呼叫了f2()的方法去處理f()方法丟擲來的異常。 * 這裡f2()呼叫f()方法時,選擇不處理f()方法中可能丟擲的異常,將異常繼續丟擲 * @throws Exception */ void f2() throws Exception { f(); } /** * f3方法呼叫f方法捕獲f()方法丟擲的2個異常並進行處理 */ void f3() { try { f(); } catch (FileNotFoundException e) { System.out.println(e.getMessage());//處理的方法是把錯誤資訊打印出來 } catch (IOException e) { e.printStackTrace();//處理的方法是使用printStackTrace()方法把錯誤的堆疊資訊全部打印出來。 } } public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("MyFile.txt"); int b = fis.read();//這個有可能會丟擲IOException異常 while (b != -1) { System.out.println((char)b); b = fis.read(); } } catch (FileNotFoundException e) { //使用catch捕獲FileNotFoundException類異常的異常物件e。並讓異常物件e自己呼叫printStackTrace方法打印出全部的錯誤資訊 e.printStackTrace(); } catch (IOException e) { //再次使用catch捕獲IOException類的異常物件e,並讓異常物件e自己呼叫getMessage()方法將錯誤資訊打印出來。 System.out.println(e.getMessage());; }finally{ try { /** * 前面已經把一個檔案打開了,不管開啟這個檔案時有沒有錯誤發生,即有沒有產生異常,最後都一定要把這個檔案關閉掉, * 因此使用了finally語句,在finally語句裡面不管前面這個檔案開啟時是否產生異常,在finally這裡執行in.close()都能把這個檔案關閉掉, * 關閉檔案也有可能會產生異常,因此在finally裡面也使用了try……catch語句去捕獲有可能產生的異常。 */ fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
四、自定義異常