標籤: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 處理