Java基础:Java异常体系

目录

图解:

异常机制为我们回答了:

Error和Exception的区别:

Exception中的RuntimeException和非RuntimeException:

常见异常:

RuntimeException:

非RuntimeException:

Error:

Java的异常处理机制:

标准异常处理流程

try-catch-finally

Java异常处理原则:

异常处理框架:

try-catch效率测试:


图解:


Java基础:Java异常体系_第1张图片

Java基础:Java异常体系_第2张图片

异常机制为我们回答了:


  • What:异常类型回答什么异常被抛出
  • Where:异常堆栈回答在哪抛出
  • Why:异常信息回答为什么被抛出

Error和Exception的区别:


从概念角度分析Java异常处理机制:

Error:程序无法处理的系统错误,编译器不做检查。一般是指与JVM相关的问题,如系统崩溃、虚拟机错误、内存不足、方法调用栈溢出等。

Exception:程序可以处理的异常,捕获后可以恢复。

 

Exception中的RuntimeException和非RuntimeException:


  • RuntimeException:不可预知,程序应自行避免
  • 非RuntimeException:可预知,在编译器内校验的异常

从责任角度看:

  • Error:JVM承担责任
  • RuntimeException:程序承担责任
  • Checked Exception可检查异常:编译器承担责任

常见异常:


RuntimeException:

Java基础:Java异常体系_第3张图片

1.当程序要在使用对象的地方使用null时,会有空指针异常。例如调用空的对象的实例方法、访问空对象的属性、计算空对象的长度等。

2.当AB不是父类与子类关系时,将A的实例a转换为B类时会出现的异常。

3.给方法传参是不满足参数要求、个数等。

4.数组下标为负或超出长度时。

5.将String转为数字时。

非RuntimeException:

Java基础:Java异常体系_第4张图片

Error:

Java基础:Java异常体系_第5张图片

1.找不到类定义的原因:

Java基础:Java异常体系_第6张图片

 

Java的异常处理机制:


标准异常处理流程

  1. 抛出异常→捕获异常→捕获成功(当catch的异常类型与抛出的异常类型匹配时,捕获成功)→异常被处理,程序继续运行
  2. 抛出异常→捕获异常→捕获失败(当cathc的异常类型与抛出异常类型不匹配时,捕获失败)→异常未被处理,程序中断运行

try-catch-finally

  • try 块 负责监控可能出现异常的代码
  • catch块 负责捕获可能出现的异常,并进行处理
  • finally块 负责清理各种资源,不管是否出现异常都会执行
  • 其中try块是必须的,catch和finally至少存在一个

Java异常处理原则:

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

异常处理框架:


Java基础:Java异常体系_第7张图片

Java基础:Java异常体系_第8张图片

try-catch效率测试:


比较if与try-catch:

Java基础:Java异常体系_第9张图片

结果是try-catch用时更长,原因如下:

Java异常处理消耗性能的地方:

  • try-catch块影响JVM的优化
  • 异常对象实例需要保存栈快照等信息,开销较大

所以编程过程中try块内只写可能出现异常的代码,不要包含多余代码。

你可能感兴趣的:(Java基础总结,后端,Java,基础,异常)