认识 Java 中的异常 看这篇

目录

1. 初始异常

2. 防御式编程

3. 异常的基本用法

3.1 基本语法

3.2 为什么要处理异常

3.3 关于异常的处理方式

3.4 异常处理流程

3.5 捕获异常的注意点

3.6 抛出异常

3.7 关于finally

4. Java 异常体系

4.1 Java 内置的异常类之间的继承关系图

4.2 受查异常和非受查异常的区别

5. 自定义异常类


1. 初始异常

异常指的是程序在运行时出现错误时通知调用者的一种机制。

“运行时”指的是程序已经编译通过得到 class 文件了,再由 JVM 执行过程中出现的错误。而有些错误是编译过程中就会出错,这是“编译期”出错。

2. 防御式编程

错误在代码中是客观存在的,要让程序出现问题的时候及时通知程序员,有两种方式。

  • LBYL: Look Before You Leap. 在操作之前就做充分的检查。
  • EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理。异常的核心就是 EAFP.

3. 异常的基本用法

3.1 基本语法

try{
    有可能出现异常的语句 ;
} catch (异常类型 异常对象) {
    ... 
} finally {
    异常的出口
}

其中:

try 代码块中放的是可能出现异常的代码。
catch 代码块中放的是出现异常后的处理行为。
finally 代码块中的代码用于处理善后工作, 会在最后执行。
其中 catch 和 finally 都可以根据情况选择加或者不加。

3.2 为什么要处理异常

程序中如果一旦出现异常,不处理异常,程序就终止了,异常之后的代码段就不会执行。

比如:

但如果进行异常处理,一旦 try 中出现异常,那么 try 代码块中的程序就不会继续执行,而是交给 catch 中的代码来执行。catch 中的代码执行完毕后会继续执行,程序不会停止。这样就有利于程序的执行效率。 

 关于 "调用栈"
方法之间是存在相互调用关系的, 这种调用关系我们可以用 "调用栈" 来描述。 在 JVM 中有一块内存空间称为 "虚拟机栈" 专门存储方法之间的调用关系。当代码中出现异常的时候, 我们就可以使用 e.printStackTrace(); 的方式查看出现异常代码的调用栈。

3.3 关于异常的处理方式

异常的种类有很多, 我们要根据不同的业务场景来决定。
1. 对于比较严重的问题(例如和算钱相关的场景), 应该让程序直接崩溃, 防止造成更严重的后果。
2. 对于不太严重的问题(大多数场景), 可以记录错误日志, 并通过监控报警程序及时通知程序员。
3. 对于可能会恢复的问题(和网络相关的场景), 可以尝试进行重试。
在我们当前的代码中采取的是经过简化的第二种方式。我们记录的错误日志是出现异

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值