Java 處理異常__Java

來源:互聯網
上載者:User

Java 中使用 try-catch 或 try-catch-finally 來捕獲並處理異常。

一、關於try - catch

基本文法

try{  // 需要被檢測的代碼}catch(異常類 變數){ // 處理方式}

如果try塊中的代碼拋出異常會發生什麼呢。拋出異常的方法終止執行,程式的控制權將被移交給catch塊中的例外處理常式,那麼catch塊中的代碼如何寫呢。可以發出一些警告提醒使用者或者編程人員去檢查一些配置,以及網路連接,也可以在catch語句塊中進行錯誤記錄檔的記錄等 。但是,如果沒發生異常,catch 代碼塊不會被執行。

如何捕獲異常程式碼範例(單一類型異常):

        try{            System.out.println("請輸入你的年齡:");            Scanner scanner = new Scanner(System.in);            int age = scanner.nextInt();            System.out.println("十年後你的年齡是:"+age+10);        }catch(InputMismatchException e){            System.out.println("你應該輸出整數!!");        }        System.out.println("程式結束啦");

測試結果:

請輸入你的年齡:15.2你應該輸出整數!!程式結束啦

注意: 在try-catch塊執行完畢後,在其後面的代碼也會繼續執行。

如何捕獲異常程式碼範例(多種類型異常): 多個catch塊分別捕獲多種類型的異常。

        try{        Scanner input = new Scanner(System.in);        System.out.println("請輸出第一個數:");        int one = input.nextInt();        System.out.println("請輸出第二個數:");        int two = input.nextInt();        System.out.println("兩數相除的結果為:"+one/two);        // 輸入不匹配異常        }catch (InputMismatchException e){            System.out.println("你應該輸入整數");       // 算術異常        }catch (ArithmeticException e){            System.out.println("除數不能為0");        } catch (Exception e){            System.out.println("未知名錯誤");        }        System.out.println("程式運行結束了");

測試結果 :

請輸出第一個數:10請輸出第二個數:0除數不能為0程式運行結束了

編寫多重catch塊遵循: 先具體、後一般(先子類後父類)
這是因為當發生異常時,異常處理系統會就近尋找匹配的例外處理常式,而子類繼承於父類,針對於父類的例外處理常式對於子類也是適用的。

二、關於 try-catch-finally
基本文法

try{//一些會拋出異常的方法}catch(Exception e){//處理該異常的代碼塊}catch(Exception 2e){//處理該異常的代碼塊}...(n個catch塊)...{...}finally{//最終將要執行的代碼}

不管程式有無發生異常 ,都將執行finally語句塊中的內容,這使得不管在任何情況下都必須執行的步驟被執行,這樣可以保證程式的健壯性。

看個finally的例子,定義如下方法

/**     * divider(除數)     * result (結果)     *  try-catch不會while迴圈     *  每次迴圈,divider 減1,result = result +100/divider     *  如果: 捕獲異常,列印輸出,拋出異常了,並返回999     *  否則,返回resul     *  finally  : 這是finally,同時列印輸出result的值     * */    public int test2(){        int divider = 10;        int result = 100;        try{            while(divider > -1){                divider--;                result = result +100/divider;            }            return result;        }catch(Exception e){            // 將該異常的跟蹤棧資訊輸出到標準錯誤輸出            e.printStackTrace();            System.out.println("拋出異常了");            return result = 999;        }finally{            System.out.println("這是finally,result的值="+result);        }    }

輸出結果:

注意 :
1) try-catch-finally 中的finally語句塊,是在try和catch語句塊中的rerutrn語句執行完成之後,返回到調用者之前會去執行的
2)如果try-catch-finally 之內沒有任何的return語句,則會調用者3個語句塊之外的語句
3) fially 語句塊一般 放一些 釋放資源的代碼。例如 : 操作資料時發生異常後,在finally 關閉資料庫連接

三、訪問異常資訊

如果Java應用程式要在catch塊中訪問異常對象的相關資訊,則可以通過調用catch有異常形參的方法來獲得。

在Java中所有的異常對象都包含如下常用的方法:

1、getMessage(): 返回該異常的詳細描述字串

例如 : / by zero

2、toString() 異常名字 : 異常資訊

例如 : java.lang.ArthmeticException : / by zero

2、printStackTrace() : 將該異常的跟蹤棧資訊輸出到標準錯誤輸出 包括 : 異常名稱、異常資訊、異常出現位置 這個方法的傳回值 是void。

其實jvm預設的異常處理機制,就是在調用printStackTrace(),列印異常的堆疊追蹤資訊

例如 :

java.lang.ArithmeticException: / by zero    at com.lemon.FinallyTest.test2(FinallyTest.java:54)    at com.lemon.FinallyTest.main(FinallyTest.java:119)

demo地址 : http://download.csdn.net/download/qq_18505715/9865121

聯繫我們

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