跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 运行时常见异常类型与解决思路

总结了 Java 开发中常见的三类运行时异常。第一类是编码疏忽导致的空指针、类型转换和越界异常;第二类是业务逻辑相关的特定异常,如库存不足;第三类涉及框架集成,包括 Spring Bean 创建、事务回滚、数据库约束冲突及网络超时等。文章还给出了避免的坑,强调深入分析场景而非简单罗列,并指出结构化回答能体现实战经验。

GitMaster发布于 2026/3/30更新于 2026/10/25107 浏览
Java 运行时常见异常类型与解决思路

第一类:常见的运行时异常

这类异常通常是由于编码疏忽或逻辑不严谨造成的。

  • 空指针异常
    • 场景: 最经典的比如:调用 null 对象的方法 user.getName(),从 Map 中 get 一个不存在的键返回 null 后继续操作,或者自动拆箱 Integer 为 int 时对象为 null。
    • 原因与解决: 根本原因是缺少 null 值判断。解决方法是:1)在调用前进行判空;2)使用 Optional 类来优雅地处理可能为 null 的情况;3) 在获取 Map 值时使用 getOrDefault 方法。
  • 类型转换异常
    • 场景: 在使用集合框架时,比如从一个声明为 List 的集合里取出一个元素并强转为 String,但实际上里面存放的是 Integer。
    • 原因与解决: 原因是类型不安全。解决方法是:1)在使用泛型集合时,始终指定具体的类型参数,利用编译器的类型检查;2)在强制转换前使用 instanceof 进行类型判断。
  • 数组越界/字符串越界异常
    • 场景: 循环或访问数组、列表、字符串时,索引超出了有效范围。
    • 原因与解决: 循环条件或索引计算错误。解决方法是在访问前检查索引是否 >=0 且 < array.length

第二类:业务相关的特定异常

这类异常与你的项目业务逻辑紧密相关,能体现你的业务理解能力。

  • 场景: 比如在一个电商项目中,遇到过 InventoryShortageException。
  • 原因: 用户下单时,系统检测到商品库存不足。
  • 解决: 这不仅仅是一个技术异常,更是一个业务流程问题。不仅在代码中抛出这个异常,还在前端给用户明确的提示'商品库存不足',并引导用户重新选择。同时,这个异常会触发告警,通知运营人员及时补货。

第三类:框架和集成相关的异常

这类异常能体现你对所用技术栈的熟悉程度。

  • Spring 框架中的异常:
    • BeanCreationException:比如 Bean 注入失败,可能是因为循环依赖。通过代码重构,使用 @Lazy 注解或 setter 注入来解决。
    • TransactionException:事务回滚失败。检查了事务的传播属性和数据库连接,确保在异常发生时事务能正确回滚。
  • 数据库相关异常:
    • DataIntegrityViolationException:插入数据违反了数据库约束(如唯一键冲突、外键约束)。通过在前端增加数据校验和在代码中先查询再插入的逻辑来避免。
    • DeadlockLoserDataAccessException:数据库死锁。通过分析数据库死锁日志,调整业务逻辑中 SQL 的执行顺序,或者缩短事务执行时间来减少死锁概率。
  • 网络和微服务异常:
    • ConnectException / SocketTimeoutException:在调用外部 HTTP 接口或微服务时,连接超时或读取超时。
    • 原因与解决: 网络不稳定或下游服务响应慢。解决方案是:1)合理设置连接和读取超时时间;2)引入重试机制(如 Spring Retry);3)使用熔断器模式(如 Hystrix 或 Resilience4j)防止雪崩效应。

需要避免的坑

  • 不要说'我没遇到过什么异常':这会显得经验不足。
  • 不要只停留在表面:不要只说'我遇到了 NPE,然后加了判空'。要深入一点,讲讲场景和思考。
  • 不要抱怨:不要把问题归咎于同事或过时的代码,要展示主动解决问题的能力。

总结

面试官问这个问题,不仅仅是想听你列举异常名称,他更想考察实战经验、问题分析能力和解决复杂问题的思路。用一个结构化的回答,并结合一个深入的故事,会让你在这个问题上获得高分。

目录

  1. 第一类:常见的运行时异常
  2. 第二类:业务相关的特定异常
  3. 第三类:框架和集成相关的异常
  4. 需要避免的坑
  5. 总结

更多推荐文章

查看全部
  • C++11 新特性详解:Lambda 表达式、std::function 与 bind
  • 基于 Python 搭建个人 AI 知识库的六步实战指南
  • 从 MVP 到千万级并发:AI 在前后端开发中的差异化落地指南
  • Rembg WebUI 主题定制与功能扩展实战
  • 基于 Java 的消息队列选型:RabbitMQ、RocketMQ、Kafka 实战对比
  • 个人健康中枢的 AI 硬件革新与精准健康管理路径
  • C++ 哈希表原理及 unordered_set/map 实现
  • Claude Code SDK Python 使用指南:从基础安装到自定义工具开发
  • 大规模语言模型从理论到实践
  • Linux 系统信息查看核心命令全解析:跨发行版适配
  • HarmonyOS 6.0 OAID 服务正式支持 TV 设备
  • 多进制奇偶校验检查器:HTML+CSS+JS 纯前端实现
  • Linux 网络基础概念与协议模型详解
  • Python 数学可视化:显函数、隐函数及复杂曲线交互绘图
  • Linux lsof 命令常用用法与实战指南
  • 数据结构与算法:深入理解希尔排序
  • 飞书 CLI 开源指南:AI 接管办公全流程实操
  • GTC 2026 前瞻:Rubin 平台与 AI 工厂化趋势
  • 学术写作合规工具功能分型与协同路径:八类系统解析
  • FPGA 核心硬件资源详解:LUT、FF、BRAM、DSP、PLL 及综合报告解读

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online