Java基础------知识点整理(九)-----异常

1.所有的标准异常类都有两个构造器:一个默认构造器,一个接受字符串作为参数,一遍能把相关信息放入异常对象的构造器:

        

    throw new NullPointerException("t = null");


2.Throwable是异常类的根类

Throwable

    | ---- Error:这种错误一般是JVM抛出的错误,我们不能处理的

    | ---- Exception:

           | ---- RuntimeException:运行时异常,编译时能通过,运行不通过,很可能是使用者的使用方式有问题,如角标越界这种

           | ---- 非RuntimeException:编译就不能通过,这样提醒程序员程序本身有问题


Throwable,直意就是具有可抛行,所以其子类都能够被throw和throws这两个关键字修饰,换句话说,如果让一个类成为异常类,必须继承异常类,这样才能具有可抛行,才能被throw和throws修饰。


3.throw  和throws区别

(1)throw使用在函数内,throws使用在函数上

(2)throw抛出的是异常对象,只能抛一个

          throws抛出但是异常类,可以抛出多个,用逗号隔开就可以了


4.异常使用时注意

(1)一个函数内,如果直接抛出异常,那么这个函数上也要抛出这个异常

(2)如果一个函数调用了这个带有异常的函数,此时这个函数也得处理这个异常(要么捕获,要么抛出)


5.异常的捕获

格式

try{
    coding....//需要被检测的异常代码
}catch(异常类的变量){//如  catch(NullPointerException  e)
    coding....//处理异常的代码
}finally{
    coding....//哪怕抛出了异常,也一定会执行的代码,一般常用于释放资源
}


6.抛出和捕获异常

一般程序不能解决,就直接抛出异常,让程序停止,用throw

一般能自己处理,就用try,catch捕获异常

class ExceptionDemo{
    public int method(int[] arr, int index) throws NullpoiterException,MinusIndexExcption{//记得在函数上也抛异常,而且用throws,因为函数上可以抛多个,所以多了个s
        if(arr == null)
            throw new NullPoiterException();
        if(index < 0)
            throw new MinusIndexException();
        return arr[index];
    }
}

 main 函数中 

ExceptionDemo ed = new ExceptionDemo();
try{
    int num = ed.method(null,-1);//只要调用了抛异常的方法,就可以try  catch,并且,try里的函数抛了几个异常,就catch几次,类似于switch判断是那种情况的异常
    syso("num = " + num);
}catch(NullPointerException e){
    syso(e.toString());
}catch(MinusIndexException e){
    syso(e.toString());
}catch(Exception e){           //如果多个catch时,记得把父类的catch放在最下面,否则肯定经过第一个为父类就捕获到了,不能做到特定异常的处理了
    syso("多个catch时,父类的放在子类的下面")
}

7.子类继承父类时:

(1)子类覆盖父类方法时,如果父类的方法抛出了异常,那么子类的方法只能抛出父类的异常或子异常,不能抛父类没有的异常

(2)如果父类抛出多个异常,子类只能抛出异常的子集

(3)如果父类没有抛出异常,子类不能抛出异常,只能try  catch


8.捕获所有异常

Throwable有几个方法可以知道异常的具体信息,Exception继承于Throwable,所以可以直接调用

(1)获取详细信息

String      getMessage()

(2)获取本地语言所表示的详细信息

String    getLocalizedMessage()
(3)打印Throwable和Throwable的调用栈轨迹

void printStackTrace()
void printStackTrace(PrintStream)
void printStack(java.io.PrintWriter)



重新抛出异常

有时希望把刚捕获的异常重新抛出,尤其是在使用Exception捕获所有异常时,这样记得到了异常的引用,又可以重新将异常抛出

catch(Exception e){
    syso("An exception was thrown");
    throw e;
}

9.异常链

常常会想在捕获一个异常后抛出另一个异常,并希望把原始异常的信息保存下来,这被称为异常链

在Throwable的子类中,只有三种基本的异常类(Error,Excption,RuntimeException)提供了可以接受cause参数的构造器,其他的异常类不可以,其他类需要调用intitCause()方法而不是构造器

public Object setfield(String id,Object valud) throws DynamicFieldsException{
    if(value == null){
        DynamicFieldsException dfe = new DynamicFieldsException();
        def.initCause(new NullpointerException);
        throw def;
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值