zoukankan      html  css  js  c++  java
  • 自定义异常的实现和测试以及异常的注意事项

    /*
    * 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 }
  • 相关阅读:
    Java泛型的协变
    【LeetCode】LeetCode——第14题:Longest Common Prefix
    【BZOJ4008】【HNOI2015】亚瑟王 概率DP
    git merge 和 git merge --no-ff
    自己定义View时,用到Paint Canvas的一些温故,讲讲平时一些效果是怎么画的(基础篇 一)
    Spring Boot 集成MyBatis
    .net framework中重新注册IIS
    FireFox插件SQLite Manager的使用
    sqlite developer注册码
    javascript 中用到的时间戳函数
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8684706.html
Copyright © 2011-2022 走看看