【Java】“异常”详解

1.异常定义

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

关键字 “运行时”

有些错误是这样的, 例如将 System.out.println 拼写错了, 写成了 system.out.println. 此时编译过程中就会出错, 这是 “编译期” 出错.

而运行时指的是程序已经编译通过得到 class 文件了, 再由 JVM 执行过程中出现的错误.

异常的种类有很多, 不同种类的异常具有不同的含义, 也有不同的处理方式.

2.异常的用法

2.1捕获异常

基本语法:

try{
   
    
有可能出现异常的语句 ; 
}[catch (异常类型 异常对象) {
   
   
} ... ]
[finally {
   
   
异常的出口
}]
  • try 代码块中放的是可能出现异常的代码.
  • catch 代码块中放的是出现异常后的处理行为.
  • finally 代码块中的代码用于处理善后工作, 会在最后执行.
  • 其中 catch 和 finally 都可以根据情况选择加或者不加.

列如 : 处理一个数组越界的异常
在这里插入图片描述
在这里插入图片描述

关于异常的处理方式

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

2.2 调用栈 定义

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

2.3 其他一些注意事项

  • catch 只能处理对应种类的异常 注意catch后面的异常类型不匹配情况
  • catch可以用多个
  • 在这里插入图片描述
    代码执行到arr=null时候才会抛出空指针异常,所以before可以被打印,
    之后执行catch 空指针异常里面 代码块的代码;

结果如下:
在这里插入图片描述
一段代码可能会抛出多种不同的异常, 不同的异常有不同的处理方式. 因此可以搭配多个 catch 代码块.

  • 如果多个异常的处理方式是完全相同, 也可以写成这样
catch (ArrayIndexOutOfBoundsException | NullPointerException e) {
   
   
 ...
}
  • 也可以用一个catch捕获所有异常(不推荐这样干)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值