try-catch:异常处理的最佳实践与陷阱规避

前言

在我们的项目中,编码报错是再经常不过的事情,但是这些异常是什么?有什么不同?我们应该如何处理?

在这里我开始分享我的心得与知识~~

异常的分类

  • Error:指的是Java虚拟机无法解决的严重问题。
  • Exception:异常产⽣后程序员可以通过进行处理,使程序继续执行。

异常的处理

防御式编程

  • 编译时充分检查
  • 主要的关键字 : throw try catch finally throws

抛出异常

  • throw new +具体异常
注意事项
  • 抛出的对象必须是exception或者其子类。
  • 如果抛出的是编译时(非受查)异常,用户必须自己处理

声明异常

  • 在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调⽤者,⽐如:参数检测。在Java中,可以借助throw关键字,抛出⼀个指定的异常对象,将错误信息告知给调⽤者。
  • 可以尽量一次性查出多的异常。
注意事项
  • throws必须在方法参数列表之后
  • ⽅法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间⽤逗号隔开,如果抛出多个 异常类型具有⽗⼦关系,直接声明⽗类即可。
  • 调⽤声明抛出异常的⽅法时,如果该异常是编译时异常/受查异常时,调⽤者必须对该异常进⾏处理,或者继续使⽤throws抛出。(alt+回车)

try-catch

  • 这相当于程序员自己处理异常,后续代码是可能运行的,但如果是简单声明异常,就相当于jvm进行处理,后续代码将不再执行。
  • 在这种连续的catch中尽量将父类放到最后,避免重复报错。
注意事项
  • try块内抛出异常位置之后的代码将不会被执⾏
  • 如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的,那么程序将不再进行。
  • 同一时刻,只能抛出一个异常,但是可以catch多个异常
  • 在catch中可以捕获父类,但是并不推荐这种方法。

finally

在任何情况下都能实现。作用就是最后关闭资源。

异常的处理流程

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

自定义异常

  • 自定义异常通常会继承⾃ Exception 或者 RuntimeException
  • 继承⾃ Exception 的异常默认是受查异常
  • 继承⾃ RuntimeException 的异常默认是⾮受查异常

结语

到这里异常法的部分基本结束啦,谢谢大家的阅读。如有问题请直接指出。

我是Dylan,下次见~

相关推荐
xyq20247 分钟前
《jEasyUI 启用行内编辑》
开发语言
野生技术架构师7 分钟前
Java 21虚拟线程 vs Kotlin协程:高并发编程模型的终极对决与选型思考
java·开发语言·kotlin
言之。11 分钟前
Kotlin快速入门
android·开发语言·kotlin
Vivienne_ChenW15 分钟前
DDD领域模型在项目中的实战
java·开发语言·后端·设计模式
Coder_Boy_16 分钟前
基于SpringAI的在线考试系统-整体架构优化设计方案(续)
java·数据库·人工智能·spring boot·架构·领域驱动
勤奋的小王同学~16 分钟前
SpringMVC
java·spring·mvc
牙牙要健康17 分钟前
【open3d】Windows 下编译 Open3D C++ 源码完整教程
开发语言·c++·windows
笨蛋不要掉眼泪17 分钟前
RAG知识库核心API架构全解析:从文档加载到向量检索的完整流程
java·spring boot·redis·ai·架构
不染尘.22 分钟前
二叉树相关题目
开发语言·数据结构·c++·算法
女王大人万岁28 分钟前
Go标准库 sync 详解
服务器·开发语言·后端·golang