Java异常处理

异常大约这么用

public void aMethod() throws AException, BException...{
    代码块A
    try{
        代码块B //可能产生异常并且要处理的部分,不处理的可以直接像上面throws出去,交给上面的人处理
    }catch(CException c) {
        c.printStackTrace(System.out);
        throw c;//后续的catch会被忽略
    }catch(DException) {//C如果能包含掉D,D就没有意义了,所以前面的异常要不能包含后面的
        可以catch多个异常
    }finally {//final  finally  finalize 三个完全不一样 一个表示常态不变、一个用于异常、一个GC
        无论是否产生异常均执行,try块执行完或者抛出异常后执行
    }
    代码块B
}

Throwable分为Error(编译时和系统错误)、Exception

异常Exception的构造器:默认,Exception(String)

异常体制就像社会中有些人被杀害了,尸体被发现,可以进行相应的处理和追溯

自定义异常:extends Exception

catch到之后可以被再次throw  这样的话后续的catch会被忽略

打印错误信息(从上到下 从左到右 每一个都是上一个的超集(打印的东西更多)

String=e.getMessage 、getLocalizedMessage

从祖宗那继承来的

toString  (getClass  getName getSimpleName)

特殊的打印-打印Throwable和Throwable的调用栈轨迹--打印异常冲出现到终点的人生轨迹

e.printStackTrace();//默认将输出到标准错误流 e.printStackTrace(PrintStream) 、e.printStackTrace(PrintWriter)

所谓的栈轨迹--通过getStackTrace可以得到跟e.printStackTrace()打印一样的数组,数组的0表示栈顶 异常出生的地方

特殊的方法

Throwabel fillInStackTrace()  重新填充栈信息,比如catch之后调用此方法,再throw  则打印栈轨迹的时候此处就是栈顶,不然原来的异常还是原来那样,一般用来掩盖实际的跑尸地点

initCause(Throwable cause)  根据指定的原因和 (cause==null ? null : cause.toString()) 的详细消息构造新异常(它通常包含 cause 的类和详细消息) 构造器根据cause创建只有Error、Exception、RuntimeException支持 打印时候会打印出Cause by

特殊的Exception

RuntimeException,自动被JVM抛出  不用 if(a==null) throw new NullPointerException();若不捕捉,走动调用printStackTrace(System.err)

关于finally

return语句已经执行了再去执行finally语句,不过并没有直接返回,而是等finally语句执行完了再返回结果

finally块如果出现异常会覆盖掉原来出现的异常

异常抛出与覆盖(重写)

当覆盖方法时,只能抛出在基类方法的异常说明里列出的那些对象,老子说抛出A  儿子不能抛出更大的

注:catch到异常若当时不知道如何处理,建议先写上throw new RuntimeException(catchException) 或者catchException.printStackTrace() 防止遗忘了处理

异常处理主要是类型关注比较多,其余类似,所以有必要看看常用的异常类

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值