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

初识JAVA:Java异常种类

Java 异常(Exception)体系详解

在 Java 中,异常是程序运行过程中出现的错误或异常情况。Java 提供了强大的异常处理机制,通过继承 Throwable 类来实现。

一、Java 异常体系结构图

Throwable
├── Error                // 系统级错误,不可捕获或处理
└── Exception            // 可处理的异常├── RuntimeException // 运行时异常(非检查型)└── 其他Exception      // 检查型异常(Checked Exceptions)

二、异常分类详解

1. Error(错误)

  • 定义:表示 JVM 无法恢复的严重问题,通常与编译、系统资源相关。
  • 特点
    • 不需要也不建议捕获;
    • 常见于虚拟机崩溃、内存溢出等;
  • 示例
    • OutOfMemoryError
    • StackOverflowError
    • NoClassDefFoundError

⚠️ 注意:这些错误一般由系统抛出,应用程序不应该尝试捕获它们。


2. Exception(异常)

  • 定义:代表程序可以捕获和处理的问题。
  • 子类划分
    • 运行时异常(RuntimeException)
    • 非运行时异常(受检异常 / Checked Exceptions)

3. RuntimeException(运行时异常)

  • 定义:程序运行期间发生的异常,通常由于代码逻辑错误导致。
  • 特点
    • 不强制要求使用 try-catch 或 throws 声明;
    • 出现频率高,若强制检查会影响性能;
  • 常见类型
异常类描述
ArithmeticException算术异常,如除以零
NullPointerException空指针异常,访问 null 对象的方法或属性
ArrayIndexOutOfBoundsException数组下标越界
ClassCastException类型转换异常
NumberFormatException字符串转数字失败
IllegalArgumentException非法参数异常

建议:虽然不强制捕获,但应在编码中尽量避免此类异常的发生。


4. 非运行时异常(Checked Exceptions / 受检异常)

  • 定义:编译器会强制要求处理的异常。
  • 特点
    • 必须显式捕获 (try-catch) 或声明抛出 (throws);
    • 表示程序外部环境可能引发的问题;
  • 常见类型
异常类描述
IOException输入输出异常,如读写文件失败
FileNotFoundException文件未找到
EOFException文件读取结束时仍然尝试读取
SQLException数据库操作异常
ClassNotFoundException类找不到异常
InterruptedException线程被中断异常

建议:必须进行异常处理,否则程序无法编译通过。


三、自定义异常(User-defined Exceptions)

Java 允许开发者根据业务需求创建自己的异常类,通常是继承 ExceptionRuntimeException

示例:自定义异常类

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

使用方式:

public void checkAge(int age) throws MyCustomException {if (age < 18) {throw new MyCustomException("年龄必须大于18岁");}
}

四、Java 异常处理机制关键词

关键词作用
try包含可能抛出异常的代码块
catch捕获并处理异常
finally无论是否发生异常都会执行的代码块
throw主动抛出一个异常对象
throws在方法签名中声明该方法可能抛出的异常

五、总结表格对比

分类是否检查是否强制处理常见例子是否建议捕获
ErrorOutOfMemoryError❌ 不建议
RuntimeExceptionNullPointerException✅ 建议处理
Checked ExceptionsIOException, SQLException✅ 必须处理

六、最佳实践建议

  1. 优先捕获具体的异常类型,而不是笼统地捕获 Exception
  2. 不要忽略异常,空 catch 块会导致调试困难;
  3. 合理使用 finally 来释放资源(如关闭 IO 流);
  4. 自定义异常应有意义,便于日志记录和排查问题;
  5. 在接口设计中明确声明异常,提高 API 的可维护性。
http://www.xdnf.cn/news/9964.html

相关文章:

  • Blaster - Multiplayer P117-PXXX: 匹配状态
  • 项目使用富文本编辑器发送邮件,邮箱无法预览
  • Parasoft C++Test软件单元测试_常见问题及处理
  • MySQL 8.0中的mysql.ibd文件
  • 深度学习目标检测实战——YOLOv8从入门到部署
  • linux 1.0.3
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【bt_vendor_opcode_t 介绍】
  • oracle 导入导出 dmp 数据文件实战
  • 树型表查询方法 —— SQL递归
  • RockyLinux9安装Docker
  • 进阶智能体实战八、需求分析助手(基于qwen多模态大模型对图文需求文档分析)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • 摄像头模块的镜头类型
  • Git 全平台安装指南:从 Linux 到 Windows 的详细教程
  • PCIe走线注意事项
  • 【动态规划:斐波那契数列模型】第 N 个泰波那契数
  • 英语学习5.29
  • Java开发经验——阿里巴巴编码规范实践解析5
  • 数字人系统源码搭建步骤
  • NHANES指标推荐:UAR
  • LINUX中TOMCAT安装和Nginx源码安装
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • docker-compose部署SpringBoot项目的两种方式(构建镜像和挂载文件)
  • Python打卡第39天
  • Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书
  • hf-mirror断点续传下载权重
  • AAOS系列之(六) ---CarPowerManager中写入的状态,如何在ViewRootImpl中读取问题
  • [git]忽略.gitignore文件
  • 软件项目需求说明书简要模板
  • 【Redis】大key问题详解
  • 【计网】分片