学习笔记
📝Java中的异常处理
00 分钟
2023-12-10
2024-6-30
type
status
date
summary
slug
tags
category
password
URL
icon
🧐
在Java开发中,经常遇到对异常的处理。一般情况下,大部分同学都会try-catch后记录到异常日志,这种处理方式真的是正确的吗?
在介绍Java异常最佳实践前,先介绍一下Java中的异常分类。
Java中的Throwable是异常的超类。Throwable包含两个子类Error和Exception,Error表示错误,Exception表示异常。其中Exception又可以进一步细分为受检异常(Checked Exception,也称为非运行时异常)和非受检异常(Unchecked Exception,也称为运行时异常)。受检异常和非受检异常,受检异常是指编译器在编译期间检查的那些异常,针对受检异常,开发者必须在代码中显式的处理(try-catch或者是向上抛出);而针对非受检异常,编译器无法检查这部分异常,开发者可依据实际情况选择处理或者不处理。
 
除了RunTimeException外,所有直接继承Exception的异常都是受检异常。
 
在Java中,Lombok库提供了一个@SneakyThrows注解,用于在不显示声明抛出异常的情况下抛出受检查的异常。使用该注解,在带来便利的同时,也会带来一些问题,比如由于无法直接看到方法可能会抛出的受检异常,可能会导致一些异常被忽视或者不正确处理。

📝 Java中的异常处理不规范案例

 
异常处理分为三个阶段:捕获→传递→处理。try-catch的作用是捕获异常,throw的作用是将异常传递给合适的处理程序。捕获、传递、处理,三个阶段,任何一个阶段处理不当,都会影响到整个系统。下面分别介绍一下常见的异常处理不规范案例。
 

捕获

  • 捕获异常的时候不区分异常类型。
  • 捕获异常不完全,比如该捕获的异常类型没有捕获到。

传递

  • 异常信息丢失(Catch住异常后不做任何处理)
  • 异常信息转译错误,比如在抛出异常的时候将业务异常包装成了系统异常。
  • 不必要的异常包装。
  • 在受检异常传递过程中尽量不要将受检异常包装为非受检异常,这可能导致异常的真正原因被掩盖。

处理

  • 重复处理
  • 处理方式不统一
  • 处理位置分散
 

📝 Java中的最佳实践

在Java中,可以结合错误码和自定义异常,实现一套Java异常处理系统。
 

错误码

设计一套错误码机制相当有必要,通过错误码,我们可以快速定位出问题的模块。
 
 

异常处理原则

处理异常时区分业务异常和逻辑异常。在处理异常时,遵循“在顶端处理异常”的原则,尽量将异常向上抛出。
 
 
 
 
参考资料:
  1. https://developer.aliyun.com/article/1177644
上一篇
基于llama-index对embedding模型进行微调
下一篇
红米K70标准版续航真实体验