java中的自定义异常

来源:互联网 发布:superslide.min.js 编辑:程序博客网 时间:2024/06/18 18:43

       所谓的自定义异常,也就是自己定义一个类,继承异常类RuntimeException, 经常需要定义一个或多个构造函数,以在对象中存储错误消息。

/*ExceptionDemo4.java中的异常,不好认,能不能定义一个符合我的程序要求的问题名称。异常的信息都可以自定义,那么异常的名字是否可以定义呢?是否可以定义成更符合自己程序的阅读呢?之前的几个异常都是java通过类进行的描述。并将问题封装成对象,这是符合面向对象思想。其实:异常就是将问题封装成了对象。所以我也准备对自己所需要的问题进行类的描述。发生编译失败:ExceptionDemo5.java:43: 错误: 不兼容的类型                        throw new NoAgeException(age+",年龄数值非法");                              ^  需要: Throwable  找到:    NoAgeException1 个错误不兼容,不明白,查阅,提示中说需要Throwable,啥东西?搜索API。看到Throwable描述。发现。它是异常和错误的超类(父类)原来它是异常体系的顶层类。Throwable|--Error|--Exception通过阅读:自定义异常被抛出,必须是继承Throwable,或者继承Throwable的子类。该对象才可以被throw抛出。原来这个异常体系具备一个特有的特性:可抛性:可以被throw关键字操作。继承选择父类时,更为确切是继承Exception。但是发现编译又一次失败了。ExceptionDemo5.java:62: 错误: 未报告的异常错误NoAgeException; 必须对其进行捕获或声明以便抛出                        throw new NoAgeException(age+",年龄数值非法");                        ^1 个错误通过这个编译失败提示,发现自定义的异常和之前所使用的异常(空指针异常,角标越界异常,无效参数异常有不同)抛出哪些异常没有这个失败提示?那么之前的异常和自定义的异常有什么区别呢?通过查看api的继承体系发现,之前的异常都是Exception下面的RuntimeException子类的子类。阅读RuntimeException描述中有明确说明,这个运行时异常以及其子类都无需进行声明。可以将自定义的异常继承RuntimeException.*///自定义异常。描述Person的年龄数值非法。/**只要是本项目的Person的年龄出现非法值就会发生该异常。*/class NoAgeException extends RuntimeException{/*为什么要定义构造函数,因为看到Java中的异常描述类中有提供对问题对象的初始化方法。*/NoAgeException(){super();}NoAgeException(String message){super(message);// 如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。}}class Person{private String name;private int age;Person(String name,int age){//加入逻辑判断。if(age<0 || age>200){throw new NoAgeException(age+",年龄数值非法");}this.name = name;this.age = age;}//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。public String toString(){return "Person[name="+name+",age="+age+"]";}}class ExceptionDemo5 {public static void main(String[] args) {Person p = new Person("xiaoming",-20);System.out.println(p);}}
运行结果为:

1 0
原创粉丝点击