1: package Test_Exception;
2:
3: public class Test_Exception {
4:
5: /**
6: * @param args
7: */
8: public static void main(String[] args) {
9: // TODO Auto-generated method stub
10:
11: int[] i = new int[]{0,1,2};
12:
13: //i[3] =0; 此行產生例外事件,沒有例外處理的話,輸出預設的錯誤訊息
14: /*
15: * java.lang.ArrayIndexOutOfBoundsException: 3
16: at Test_Exception.Test_Exception.main(Test_Exception.java:13)
17: */
18:
19: /**使用例外處理範例*/
20: try//使用 try 把可能發生例外的程式碼包住,必須和 catch 連用
21: {
22: i[3] =0;//此行產生例外事件後會到catch比對
23: }
24: catch(ArrayIndexOutOfBoundsException aiooe)//catch 區塊 可以多個,子類別必須排在前面,會和try區塊產生的例外比對
25: {
26: System.out.println("進入 aiooe ");
27: aiooe.printStackTrace();//印出預設的錯誤訊息
28: /*
29: * java.lang.ArrayIndexOutOfBoundsException: 3
30: at Test_Exception.Test_Exception.main(Test_Exception.java:21)
31: */
32: }
33: catch(Exception e1)//不會執行這裡,因為在前1個catch已經符合例外
34: {
35: System.out.println("進入 e1 ");
36: e1.printStackTrace();
37: }
38: // catch(RuntimeException re)//編譯錯誤,若有多個 catch ,必須把子類別catch放在前面
39: // {
40: //
41: // }
42: finally//finally區塊 只能單個,無論有沒有發生例外都會執行這裡
43: {
44: System.out.println("finally 執行");
45: }
46:
47: /**使用自訂例外訊息範例*/
48: try{
49:
50: i[0] = -1;
51:
52: for(int i2 : i)
53: {
54: if(i2<0)
55: //如果不予許i陣列值中設定負數元素,可用 throw 產生例外,並傳入自訂顯示訊息,必須用 try-catch包括
56: throw new Exception("使用自訂例外訊息:i陣列中有負數元素");
57: }
58:
59: }
60: catch(Exception e)
61: {
62: e.printStackTrace();
63: /*
64: * java.lang.Exception: 使用自訂例外訊息:i陣列中有負數元素
65: at Test_Exception.Test_Exception.main(Test_Exception.java:55
66: */
67: }
68:
69: /**使用自訂例外類別範例*/
70: try{
71:
72: i[1] = -2;
73:
74: for(int i2 : i)
75: {
76: if(i2<0)
77: {
78: throw new ArrayNoNativeNumberException("使用自訂例外類別:i陣列中有負數元素");
79: }
80: }
81: }
82: catch(ArrayNoNativeNumberException aioobe)
83: {
84: aioobe.printStackTrace();
85: /*
86: * Test_Exception.ArrayNoNativeNumberException: 使用自訂例外類別:i陣列中有負數元素
87: at Test_Exception.Test_Exception.main(Test_Exception.java:75)
88: */
89: }
90:
91: /**使用 throws 範例*/
92: try{
93:
94: callException();//使用 throws 修飾方法,當使用該方法時,就必須用try-catch包括
95:
96: }
97: catch(Exception e)
98: {
99: e.printStackTrace();
100: }
101:
102: /**使用 assert 測試錯誤,執行指令必須加入 -ea 如, java -ea Test_Exception*/
103: for(int itemp : i)
104: {
105: // assert 條件式 : 執行內容 ; 注意:條件式必須為 false 才會執行
106: assert itemp>0 : "使用assertError:i陣列中有負數元素";
107: }
108: }
109:
110: //方法中可能出現例外就用 throws 例外類別,當使用該方法時,就必須用try-catch包括
111: public static void callException() throws Exception
112: {
113: // throw new Exception("331231");
114:
115: }
116:
117:
118: }
119:
120: //自訂例外類別
121: class ArrayNoNativeNumberException extends Exception
122: {
123: public ArrayNoNativeNumberException(String s1)
124: {
125: super(s1);
126: }
127: }