浅谈异常类由来,及自定义异常原理。

API异常类的继承体系
在API中可以查看long类下的继承分支类,当然还包括其他的,现在就搞一搞object类下面的子类:Throwable类!
首先谈谈Throwable类是什么意思:Throw是抛的意思able是可抛,类似于Runnable(可运行)的意思。
那么如图所示在Throwable类下面有两个直接已知子类:1.error 2.Exception.在谈异常之前我已经假设你能将异常和错误区分开了。那我废话不多说,重点是Exception这个类,我们再次打开API查看Exception类当中的一些类。
Exception类的已知子类
这里我们看到它的已知子类更多,那么到这一步你会发现,平时遇到的一些问题是不是感觉很眼熟,因为这里的已知子类就是平时遇到异常时直接抛出的。
但是,Java给我们用面向对象的思想封装了已知的一些异常,可它不可能将所有问题都考虑到,所以需要我们自己进行自定义异常类。
前面我说过所有已知异常子类的父类都是继承自Exception,所以要想创建一个类并且称为异常类,就必须继承自Exception或者RuntimeException。如下:

public class MyException extends Exception{//继承Exception类
public MyException(){....}
}
public MyException(String message){
    super(message);//调用父类方法getMessage();是获取异常的消息字符串的意思
}
public class MyException extends RuntimeException{//继承RuntimeException类
}

这样就实现了自定义异常类了,可以再自己的方法中或者方法外试着抛出吧!
号外!!【异常注意事项】
1.子类在覆盖父类方法时,父类的方法如果抛出了异常。
那么子类只能抛出父类异常或者该异常类的子类(父亲坏了,儿子不能比父亲更坏)

2.如果父类抛出多个异常,那么子类只能抛出父类异常的子集
简单说:子类覆盖父类,只能抛出父类的异常或者父类异常的子类。

3.如果父类没有抛出异常,那么子类覆盖的时候,绝不能抛,只能try-catch处理

接着上面定义的异常类继续,异常类已经有了,所以,我需要在其他类中抛出自定义的具体异常。代码如下:

public class Exception02 {
                        public static void main(String[] args) throws Exception{
                            int[] arr=new int[3];
                            Demo d=new Demo();
                            d.method(arr, -10);
                            d.toString();
                        }
}
class FuShuIndexException extends Exception{//自定义异常类
    FuShuIndexException(){}//空参构造
    FuShuIndexException(String msg){
        super(msg);调用父类message方法,该方法返回带有异常信息。
    }
}
class Demo{
            public void method(int[] arr,int index) throws Exception{
                            if(arr==null) {
                                  throw new NullPointerException("数组的引用为空");//抛出空指针异常
                            }
                            if(index>=arr.length) {
                                throw new ArrayIndexOutOfBoundsException("数组角标越界啦,你是不是疯啦。");//抛出角标越界异常
                            }
                            if(index<0) {
                                throw new FuShuIndexException("角标负数");//抛出角标负数的自定义异常
                            }
            }
}

运行结果如图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值