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

JAVA中异常体系总结

一、异常体系总体结构

所有异常的父类都是Exception;

但凡是异常对象,无论原因,都可以被抛出。

二、异常分类

(一)、Error(错误)

特点:严重问题,应用程序通常无法处理;由JVM(JAVA虚拟机)产生和抛出

常见子类:

  • VirtualMachineError(虚拟机错误)

  • OutOfMemoryError(内存溢出)

  • StackOverflowError(栈溢出)

  • NoClassDefFoundError(类定义未找到)

(二)、 Exception(异常)

(1) RuntimeException(运行时异常/非受检异常)

特点:由程序逻辑产生的异常,不强制捕获

常见子类:

  • NullPointerException(空指针)

  • ArrayIndexOutOfBoundsException(数组越界)

  • ClassCastException(类型转换异常)

  • IllegalArgumentException(非法参数)

  • ArithmeticException(算术异常)

(2) 非RuntimeException(受检异常)

特点:必须捕获或声明抛出;从语法角度上必须解决的异常,如果不解决就无法编译通过

常见子类:

  • IOException(IO异常)

  • SQLException(SQL异常)

  • FileNotFoundException(文件未找到)

  • ClassNotFoundException(类未找到)

  • InterruptedException(线程中断)

三、异常处理机制

(一)、try-catch-finally 结构

当抛出一个异常时,可以在try-catch 块中捕获和处理它;

try语句块中:放的是可能出现问题的代码;

catch语句块中:放的是出现问题并捕获后,处理问题的代码code;如果问题在try语句块中没有出现 则catch中不会运行。

finally语句块中:放的是不管问题异常是否产生 都要执行的代码code。

 

(二)、throws声明

在 Java 中,当前执行的语句必属于某个方法。Java 解释器调用 main 方法开始执行一个程序。每个方法都必须声明它可能抛出的必检异常的类型。这称为声明异常( declaring exception)。只对编译时异常进行声明,告知方法的调用者有异常。

public void method() throws IOException, SQLException {// 方法代码
}

(三)、throws抛出异常

 检测到错误的程序可以创建一个合适的异常类型的实例并抛出它,这就称为抛出一个异常。

throw new ExceptionType("错误信息");

 声明异常的关楗字是 throws, 抛出异常的关键字是 throw。

 四、异常处理实践

1、异常捕获原则:

  • 具体异常优先于通用异常

  • 不要捕获Throwable/Error

  • 不要忽略捕获的异常(空catch块)

2、异常使用原则

  • 对可恢复情况使用受检异常

  • 对编程错误使用运行时异常

  • 避免在循环中使用try-catch

 3、自定义异常

public class MyException extends Exception {public MyException(String message) {super(message);}
}

 4、异常链

try {// 代码
} catch (Exception e) {throw new MyException("新异常信息", e); // 传递原始异常
}

http://www.xdnf.cn/news/462943.html

相关文章:

  • Ubuntu shell指定conda的python环境启动脚本
  • 构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践
  • 【论信息系统项目的合同管理】
  • VTEP是什么
  • Docker实现MySQL数据库主从复制
  • C++(1)
  • 【01背包】[USACO09MAR] Cow Frisbee Team S
  • 支付宝创建商家订单收款码(统一收单线下交易预创建).net开发的软件附带大型XML文件可以删除吗?AlipaySDKNet.OpenAPI.xml
  • Android Studio中Gradle中Task列表显示不全解决方案
  • 帧差法识别
  • Electron 主进程中使用Worker来创建不同间隔的定时器实现过程
  • c/c++消息队列库RabbitMQ的使用
  • golang -- 认识channel底层结构
  • LLM Text2SQL NL2SQL 实战总结
  • set, multiset ,unordered_set; map, multimap, unordered_map
  • 【向量维度如何选择?】
  • 深入探索向量数据库:构建智能应用的新基础
  • linux dbus
  • print()函数详解:输出文字、变量与格式化
  • Windows 安装 Redis 的几种方式
  • 设计模式(基于Python3)
  • Python课程及开源项目推荐
  • 宣纸阁项目测试报告
  • 流程编辑器Bpmn与LogicFlow学习
  • 2025长三角数学建模C题完整思路
  • Python多线程
  • 计算机网络:什么是电磁波以及有什么危害?
  • 谷歌量子计算机:开启计算新纪元
  • C# 活动窗体截图:基于 Win32 API 的实现
  • 有效的括号