Java exception 處理

來源:互聯網
上載者:User

標籤:java異常 javaexception exception順序

  先普及下什麼是異常:

        異常就是程式非正常結束,不按我們的處理邏輯執行下去了 導致程式中斷的情況。

        一般來說,一開始寫程式犯錯基本上就是 null 指標NullPointerException 數組越界 參數異常

    其實Java添加異常處理機制 是為了把異常和正常代碼隔離開來,保證程式的健壯性和完整性


    首先看段代碼

public static void main(String[] args){try {    ArrayList<Integer> nin = new ArrayList<Integer>();    nin.add(312);    nin.add(3122);    nin.add(3112);    System.out.println(nin.get(8));        } catch (Exception e) {        System.out.println("Exception");        e.printStackTrace();    } catch (ArrayIndexOutOfBoundsException e) {        System.out.println("ArrayIndexOutOfBoundsException");        e.printStackTrace();    }}

     哎....我去    代碼會編譯不過去。

    

public static void main(String[] args) throws NullPointerException {show();}        public static int[] nu = null;public static void show() {System.out.println(doSomething());try {System.out.println(nu[3]);} catch (NullPointerException e) {System.out.println("NullPointerException -");e.printStackTrace();}catch (Exception e) {System.out.println("Exception -");e.printStackTrace();}}

    輸出結果:

        NullPointerException -

        java.lang.NullPointerException

        at com.tz.TestException.show(TestException.java:26)

        at com.tz.TestException.main(TestException.java:16)




    原來Java中catch是按順序往下匹配的,而一旦catch到異常符合要求,就會直接跳出去,有finally就會執行它,沒有則直接跳出去,不再執行任何東西,所以catch異常時應該有個順序的。

    

    catch代碼塊應該是 從小範圍的到大範圍的異常  順序往下寫的。


public static int[] nu = null;public static void show() throws NullPointerException {    try {        System.out.println(nu[3]);    }catch (Exception e) {    System.out.println("");e.printStackTrace();    }}

下面這段代碼 

    Exception -

    java.lang.NullPointerException

        at com.tz.TestException.show(TestException.java:26)

            at com.tz.TestException.main(TestException.java:16)



public static int[] nu = null;public static void show()  {        System.out.println(nu[3]);        try {            }catch (Exception e) {    System.out.println("Exception -");e.printStackTrace();    }}

下面這段代碼 

    Exception in thread "main" java.lang.NullPointerException

        at com.tz.TestException.show(TestException.java:23)

        at com.tz.TestException.main(TestException.java:16)


所以try......catch的是它自己囊括的代碼出現的異常,方法上throws異常時方法裡面的異常;

 try catch裡面的異常 由它拋出,不在catcha裡面代碼出現的異常 由方法上的throws Exception拋出;多個catch異常之間,如果存在父子關係,是先寫子異常在上面,父級異常在下面,這種編譯才不會出錯;


    Java異常結構圖如下:

650) this.width=650;" src="http://img.my.csdn.net/uploads/201211/27/1354020417_5176.jpg" alt="1354020417_5176.jpg" />

由上面可以看出 Throwable分兩種 一種是異常 一種是錯誤(這種情況程式基本就跪了 恢複不了)

Java異常又分為兩種   checked異常(編譯時間異常)和Runtime異常 (運行時異常)


異常處理規則:

        try 捕獲異常  --> catch 處理異常 或者自訂異常邏輯處理代碼 --> finally 結束時操作的事

        

怎麼拋出異常?

        1. try....catch 

        2. 方法上 throws 異常 

        3. 代碼塊裡面  throw new XXXException

        4. 代碼塊裡面  throw new XXXException 架構統一處理捕獲到的異常資訊

處理拋出方式:

        (1) 如果你很明確的知道怎麼處理異常或者可能會出現什麼異常 , 應該用try....catch 的方式拋出異常並寫下處理異常代碼

        (2) 如果不知道有什麼異常, 那就在方法上拋出異常,多個異常逗號隔離開就好了 


注意: Java 在對(RunTimeException)運行時異常 就算你自己不捕獲拋出處理  它也會幫你拋出來   其實.....現在Java7開始項目大多數是把異常拋出來最頂部 也就是控制層C再處理的



本文出自 “JTR” 部落格,請務必保留此出處http://10229180.blog.51cto.com/10219180/1886167

Java exception 處理

相關文章

聯繫我們

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