Java异常体系

一.异常处理机制主要回答三个问题

(1)what:异常类型回答了什么被抛出
(2)where:异常堆栈跟踪回答了在哪抛出
(3)why:异常信息回答了为什么被抛出

二.Java异常体系

类的继承关系

Error和Exception区别
(1)Error:程序无法处理的系统错误,编译器不做检查,如系统奔溃,虚拟机错误,系统内存不足
(2)Exception:程序可以处理的异常,捕获后可以恢复
(3)总结:前者是程序无法处理的错误,后者是可以处理的异常

RuntimeException:不可预知,程序应当自动避免
#RuntimeException:可预知的,从编译器校验的异常 

从责任角度看:
(1)Error属于JVM需要负担的责任
(2)RuntimeException是程序应当负担的责任
(3)checked Exception可检查异常是java编译器应当负担的责任

三.常见异常类型

RuntimeException常见类型

1.ArithmeticException-----出现异常的运算条件时,抛出此异常(例如:一个整数“除以零”时,抛出此类的一个实例)
2.NullPointerException-----空指针引用异常
3.ClassCastException--------类型强制转换异常
4.IllegalArgumentException-------传递非法参数异常
5.IndexOutOfBoundsExceptio-------下标越界异常
6.NumberFormatException-------数字格式异常(例如把String转化为int)

非RuntimeException常见类型
1.ClassNotFoundException------找不到指定class异常
2.IOException--------IO操作异常


Error常见异常
1.NoClassDefFoundError-----找不到class定义异常
    (1)类依赖的class或者jar不存在
    (2)类文件存在,但是存在不同的域中
    (3)大小写问题,javac编译的时候是无规则的,很有可能编译出来的class文件与想要的不一样
2.StackOverflowError -----深递归导致栈被耗尽而抛出的异常
3.OutOfMemoryError--------内存溢出异常

四.java异常处理

java异常处理机制
(1)抛出异常:创建异常对象,交由运行时系统处理
(2)捕获异常:寻找合适的异常处理器处理异常,否则终止运行

java异常的处理原则
(1)具体明确:抛出的异常应能够通过异常类名和message准确说明异常的类型和产生异常的原因
(2)提早抛出:应尽量可能早的发现并抛出异常,便于精确定位问题
(3)延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常

五.高效主流异常处理框架

 (1)设计一个通用的继承自Exception的异常来统一处理
(2)其余异常都统一转译为上述异常AppException
(3)在catch之后,抛出上述异常的子类,并提供足以定位的信息
(4)有前端接受AppException作统一处理

六.try-catch性能

java异常处理消耗性能的地方
(1)try-catch块影响JVM的优化
(2)异常对象实例需要保存栈快照等信息,开销较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值