当前位置: 首页 > news >正文

Java中的异常机制

目录

Error(错误)

Exception(异常)

受检异常(Checked Exception)

非受检异常(Unchecked Exception)

图示总结:

异常处理机制

try-catch-finally

throws关键字

图示总结:

自定义异常

图示:

异常处理最佳实践


        在理想状态下,用户输入数据的格式永远都是正确的,选择打开的文件也一定存在,并且永远不会出现bug。然而,在现实世界中却充满了不良的数据和带有问题的代码,现在是讨论Java程序设计语言处理这些问题的机制的时候了。

Error(错误)

Error是程序无法处理的严重问题,表示系统级错误,通常由JVM抛出。

示例:

Error释义
ThreadDeath线程终止错误
OutOfMemoryError内存不足
StackOverFlowError栈溢出
NoClassDefFoundError类定义未找到

Exception(异常)

受检异常(Checked Exception)

关于受检异常我们必须知道:

  • 编译时检查,必须处理否则无法通过编译
  • 例子:ClassNotFoundException, IOException

特点:

  • 继承自Exception但不继承RuntimeException
  • 代表预期可能发生的问题
  • 必须用try-catch捕获或throws声明

非受检异常(Unchecked Exception)

关于非受检异常我们必须知道:

  • IndexOutOfBoundsException
  • NullPointerException

特点:

  • 继承自RuntimeException
  • 编译时不强制处理
  • 通常是程序逻辑错误导致

图示总结:


异常处理机制

try-catch-finally

try {// 可能出现异常的代码
} catch (ExceptionType1 e1) {// 处理ExceptionType1
} catch (ExceptionType2 e2) {// 处理ExceptionType2
} finally {// 无论是否发生异常都会执行的代码
}

throws关键字

if (input == null) {throw new NullPointerException("输入不能为null");
}

图示总结:


自定义异常

创建方法:

// 继承Exception或RuntimeException
class MyException extends Exception {public MyException(String message) {super(message);}
}

图示:


异常处理最佳实践

  1. 精准捕获:不要直接捕获Exception,应捕获具体异常类型
  2. 资源管理:使用try-with-resources替代finally
    try (InputStream is = new FileInputStream("file.txt")) {// 使用资源
    } catch (IOException e) {// 处理异常
    }
  3. 异常信息:提供有意义的错误信息
  4. 避免空catch块:至少记录异常
  5. 异常转换:将底层异常转换为适合业务层的异常
http://www.xdnf.cn/news/440551.html

相关文章:

  • Java 直接内存ByteBuffer.allocateDirect原理与源码解析
  • git切换分支后需要pull吗
  • Spark缓存---cache方法
  • 在Ubuntu24.04中配置开源直线特征提取软件DeepLSD
  • Java 与 Go 语言对比
  • Milvus 视角看主流嵌入式模型(Embeddings)
  • 推荐一个Winform开源的UI工具包
  • 《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot
  • 嵌入式C语言中指针的不同类型及其特点分析
  • iOS 阅后即焚功能的实现
  • 如何利用大模型对文章进行分段,提高向量搜索的准确性?
  • 关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?
  • 【SSL证书系列】操作系统如何保障根证书的有效性和安全
  • 【sql】按照数据的日期/天 ,对入库数据做数量分类
  • java加强 -File
  • MobiPDF:安卓设备上的专业PDF阅读与编辑工具
  • 【CustomPagination:基于Vue 3与Element Plus的高效二次封装分页器】
  • Spark的基础介绍
  • 性能比拼: Nginx vs. Envoy
  • AcroForm JavaScript Promise 对象应用示例: 异步加载PDF文件
  • YOLO v1:目标检测领域的革命性突破
  • 笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理
  • DAX权威指南2:CALCULATE 与 CALCULATETABLE
  • Windows 环境下安装 Node 和 npm
  • 智能化双语LaTeX系统,分阶段系统性开发技术实现路径:目标是实现语义级编译和认知增强写作,推动跨文明知识表达
  • 【C++ / STL】封装红黑树实现map和set
  • 【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
  • 腾讯云-人脸核身+人脸识别教程
  • 榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
  • PCB设计实践(十七)PCB设计时11个维度分析双层板和四层板该如何抉择