Java基础知识强化之IO流笔记07:自定义的异常概述和自定义异常实现

1. 开发的时候往往会出现很多问题(java内部系统框架中没有提供这些异常)

比如说:考试成绩必须在0~100之间。

很明显java没有对应的异常,需要我们自己来做一个异常

(1)继承自Exception(编译期)

(2)继承自RuntimeException(运行期)

 

2. 自定义异常的案例:

(1)自定义异常MyException继承自Exception,那么MyException属于编译期异常,如下:

 1 package com.himi.myexception;
 2 
 3 /**
 4  * java不可能对所有的情况都考虑到,所以,在实际开发中,我们可能需要自己定义异常
 5  * 而我们随便写的一个类,是不能作为异常类来看的,要想你的类是一个异常类,就必须继承自Exception或者RuntimeException
 6  * 
 7  * 两种方式:
 8  * A:继承Exception
 9  * B:继承RuntimeException
10  */
11 
12 public class MyException extends Exception{
13 
14     public MyException() {
15         // TODO 自动生成的构造函数存根
16     }
17     public MyException(String message) {
18         super(message);
19     }
20     
21 }

这里MyException构造方法不会写,查看源码,看看其他继承自Exception的异常构造是怎么写的,如下:TimeoutException (编译期异常

 1 public class TimeoutException extends Exception {
 2     private static final long serialVersionUID = 1900926677490660714L;
 3 
 4     /**
 5      * Constructs a {@code TimeoutException} with no specified detail
 6      * message.
 7      */
 8     public TimeoutException() {}
 9 
10     /**
11      * Constructs a {@code TimeoutException} with the specified detail
12      * message.
13      *
14      * @param message the detail message
15      */
16     public TimeoutException(String message) {
17         super(message);
18     }
19 }

以后遇到自定义一些属性或者其他不会写,我们要类比Android开源的代码中已经写好的类,查看源码,看看人家是怎么写的,依葫芦画瓢

 

(2)Teacher.java如下:

 1 package com.himi.myexception;
 2 
 3 public class Teacher {
 4     public void check (int score) throws MyException {//抛出异常(交给调用者处理)
 5         if(score>100 || score<0) {
 6             throw new MyException("你输入分数不能大于100  或者小于0 ");//这里的MyException是继承自Exception是编译时期异常,必须处理,这里上抛
 7         }else {
 8             System.out.println("你输入的分数是没有问题的");
 9         }
10     }
11 
12 }

 

(3)在编译一个测试类,测试逻辑运行情况,如下:

 1 package com.himi.myexception;
 2 
 3 import java.util.Scanner;
 4 
 5 public class StudentDemo {
 6 
 7     public static void main(String[] args) {
 8         Scanner input = new Scanner(System.in);
 9         System.out.println("请输入学生成绩:");
10         int score  = input.nextInt();
11         Teacher t = new Teacher();
12         try {
13             t.check(score);
14         } catch (MyException e) {
15             // TODO 自动生成的 catch 块
16             e.printStackTrace();
17         }
18 
19     }
20 
21 }

运行效果如下:

 

 

 

posted on 2015-09-28 21:16  鸿钧老祖  阅读(471)  评论(0编辑  收藏  举报

导航