/*
* java不可能對所有的情況都考慮到,是以,在實際的開發中,我們可能需要自定義異常類。
* 而我們自己随意的寫一個類,是不能作為自定義異常類來看待的,要想你的類能是一個自定義的異常類,就必須繼承自Exception類或者RuntimeException類。
*
* 兩種方式:
* A:自定義異常類繼承自Exception類 需要檢查編譯期異常和運作期異常
* B:自定義異常類繼承自RuntimeException類 隻需要檢查運作期異常
*/
示例代碼如下:

1 package cn.itcast_08;
2
3 /*
4 * java不可能對所有的情況都考慮到,是以,在實際的開發中,我們可能需要自定義異常類。
5 * 而我們自己随意的寫一個類,是不能作為自定義異常類來看待的,要想你的類能是一個自定義的異常類,就必須繼承自Exception類或者RuntimeException類。
6 *
7 * 兩種方式:
8 * A:自定義異常類繼承自Exception類 需要檢查編譯期異常和運作期異常
9 * B:自定義異常類繼承自RuntimeException類 隻需要檢查運作期異常
10 */
11
12 // 自定義異常類繼承自Exception類
13 //public class MyException extends Exception {
14 // public MyException() {
15 // super();
16 // }
17 //
18 // public MyException(String message) {
19 // super(message);
20 // }
21 //}
22
23 // 自定義異常類繼承自RuntimeException類
24 public class MyException extends RuntimeException {
25 public MyException() {
26 super();
27 }
28
29 public MyException(String message) {
30 super(message);
31 }
32 }
自定義異常類

1 package cn.itcast_08;
2
3 public class Teacher {
4 // 針對MyException繼承自Exception類
5 // public void check(int score) throws MyException {
6 // if (score > 100 || score < 0) {
7 // throw new MyException("分數必須在0-100之間"); // 編譯期異常
8 // } else {
9 // System.out.println("分數沒有問題");
10 // }
11 // }
12
13 // 針對MyException繼承自RuntimeException類
14 public void check(int score) {
15 if (score > 100 || score < 0) {
16 throw new MyException("分數必須在0-100之間"); // 運作期異常
17 } else {
18 System.out.println("分數沒有問題");
19 }
20 }
21
22 }
Teacher.java

1 package cn.itcast_08;
2
3 import java.util.Scanner;
4
5 /*
6 * 自定義異常的測試類
7 */
8 public class StudentDemo {
9 public static void main(String[] args) {
10 Scanner sc = new Scanner(System.in);
11 System.out.println("請輸入學生成績:");
12 int score = sc.nextInt();
13
14 Teacher t = new Teacher();
15
16 // 編譯期異常測試
17 // try {
18 // t.check(score);
19 // } catch (MyException e) {
20 // e.printStackTrace();
21 // }
22
23 // 運作期異常測試
24 t.check(score);
25 }
26 }
自定義異常的測試類
* 異常的注意事項:
* A:子類重寫父類方法時,子類的方法必須抛出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
* B:如果父類抛出了多個異常,子類重寫父類時,隻能抛出相同的異常或者是父類異常的子集,子類不能抛出父類沒有的異常。
* C:如果被重寫的方法沒有異常抛出,那麼子類的方法絕對不可以抛出異常,如果子類方法内有異常發生,那麼子類隻能try,不能throws。
1 package cn.itcast_09;
2
3 import java.text.ParseException;
4 import java.text.SimpleDateFormat;
5 import java.util.Date;
6
7 /*
8 * 異常的注意事項:
9 * A:子類重寫父類方法時,子類的方法必須抛出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
10 * B:如果父類抛出了多個異常,子類重寫父類時,隻能抛出相同的異常或者是父類異常的子集,子類不能抛出父類沒有的異常。
11 * C:如果被重寫的方法沒有異常抛出,那麼子類的方法絕對不可以抛出異常,如果子類方法内有異常發生,那麼子類隻能try,不能throws。
12 */
13 public class ExceptionDemo {
14
15 }
16
17 class Fu {
18 public void show() throws Exception {
19 }
20
21 public void method() {
22 }
23 }
24
25 class Zi extends Fu {
26 @Override
27 public void show() throws ArithmeticException {
28
29 }
30
31 @Override
32 public void method() {
33 String s = "2014-11-20";
34 SimpleDateFormat sdf = new SimpleDateFormat();
35 Date d = null; // 局部變量,引用資料類型,需要初始化為null。為什麼呢?按理說 d = sdf.parse(s); 這一句就可以初始化了啊?
36 try {
37 d = sdf.parse(s); // 編譯期異常,因為編譯的時候,我不知道try裡面有什麼語句(編譯隻檢查文法),隻有運作的時候才知道try裡面有什麼,如果這句前面有一句抛出異常,則就不會執行到這一句了。d就不能初始化了。
38 } catch (ParseException e) {
39 e.printStackTrace();
40 }
41
42 System.out.println(d);
43 }
44 }
我的GitHub位址:
https://github.com/heizemingjun我的部落格園位址:
http://www.cnblogs.com/chenmingjun我的螞蟻筆記部落格位址:
http://blog.leanote.com/chenmingjunCopyright ©2018 黑澤明軍
【轉載文章務必保留出處和署名,謝謝!】