您现在的位置是:首页 > 文章详情

自定义异常的实现和测试以及异常的注意事项

日期:2018-03-30点击:370

/*
* 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/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
原文链接:https://yq.aliyun.com/articles/607581
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章