news 2026/4/22 14:51:19

Java 常见异常(按「运行时 / 编译时」分类)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 常见异常(按「运行时 / 编译时」分类)

Java 常见异常(按「运行时 / 编译时」分类)

Java 异常主要分两大类:运行时异常(RuntimeException)(写代码时编译器不报错,运行才出问题)、编译时异常(Checked Exception)(写代码时编译器就提示必须处理,否则跑不了)。

一、最常遇到的「运行时异常」(新手高频踩坑)

这类异常是代码逻辑或使用不当导致的,编译器不强制处理,但实际开发中必须预判。

异常名称通俗解释典型触发场景解决方案
NullPointerException(空指针异常)最常见!想操作一个「不存在的对象」(对象是 null)1. 调用null对象的方法:String s = null; s.length();2. 访问null对象的属性1. 调用方法 / 属性前先判空:if (s != null) { s.length(); }2. 使用 Optional 类(Java 8+)避免空指针
ArrayIndexOutOfBoundsException(数组下标越界)访问数组时,下标超出了数组的实际长度数组长度为 5,却访问arr[5](数组下标从 0 开始,最大是 4)1. 确保下标范围:for (int i=0; i<arr.length; i++) {...}2. 避免硬编码下标,用数组长度做限制
IndexOutOfBoundsException(集合下标越界)和数组越界类似,针对 List/Set 等集合List<String> list = new ArrayList<>(); list.get(0);(集合为空,却取第 1 个元素)1. 操作集合前判断大小:if (!list.isEmpty()) { list.get(0); }2. 遍历用增强 for 循环:for (String str : list) {...}
ClassCastException(类型转换异常)强行把一个对象转换成不兼容的类型Object obj = "hello"; Integer num = (Integer) obj;(字符串转整数)1. 转换前用instanceof判断:if (obj instanceof Integer) { ... }2. 避免无意义的强制类型转换
ArithmeticException(算术异常)数学运算出错,最常见是「除以 0」int a = 10 / 0;1. 计算前判断除数:if (b != 0) { int a = 10 / b; }2. 捕获异常并提示「除数不能为 0」
NumberFormatException(数字格式异常)把非数字的字符串转换成数字Integer.parseInt("abc");("abc" 不是数字)1. 转换前校验字符串格式:用正则判断是否为数字 2. 捕获异常,提示「输入不是有效数字」
IllegalArgumentException(非法参数异常)给方法传了不符合要求的参数方法要求传正数,却传了负数:public void setAge(int age) { if (age < 0) throw new IllegalArgumentException("年龄不能为负"); }1. 方法内部校验参数合法性,不合法则抛异常并说明原因 2. 调用方法前确保参数符合要求

二、必须处理的「编译时异常」(编译器强制要求)

这类异常是程序运行时可能遇到的外部问题(比如文件找不到、网络断开),Java 强制要求用try-catch捕获,或用throws声明抛出。

异常名称通俗解释典型触发场景解决方案
IOException(IO 异常)输入 / 输出操作出错(文件 / 流相关)1. 读取不存在的文件:new FileReader("test.txt");2. 写入文件时磁盘满了1. 用try-catch捕获:java<br>try {<br> FileReader fr = new FileReader("test.txt");<br>} catch (FileNotFoundException e) {<br> System.out.println("文件找不到:" + e.getMessage());<br>} finally {<br> // 关闭流,释放资源<br>}<br>2. 或在方法上声明throws IOException
SQLException(数据库异常)操作数据库出错1. 数据库连接失败 2. SQL 语句写错 3. 访问不存在的表 / 字段1. 捕获异常并打印错误信息,排查 SQL / 连接配置 2. 确保数据库服务正常,SQL 语句正确
ClassNotFoundException(类找不到异常)想加载一个不存在的类Class.forName("com.mysql.jdbc.Driver");(没导入 MySQL 驱动包)1. 检查类名拼写是否正确 2. 确保依赖包(如 JDBC 驱动)已引入项目
InterruptedException(中断异常)线程在休眠 / 等待时被中断Thread.sleep(1000);(线程休眠时被其他线程中断)1. 捕获异常后恢复线程中断状态:Thread.currentThread().interrupt();2. 不要忽略该异常,需合理处理线程中断逻辑

三、异常处理的核心写法(新手必学)

以处理空指针和文件读取异常为例,给你一个完整的示例代码:

java

运行

import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; public class ExceptionDemo { public static void main(String[] args) { // 1. 处理运行时异常(空指针) String str = null; if (str != null) { System.out.println(str.length()); } else { System.out.println("字符串为空,无法获取长度"); } // 2. 处理编译时异常(文件读取) FileReader fr = null; try { // 尝试执行可能出错的代码 fr = new FileReader("test.txt"); System.out.println("文件读取成功"); } catch (FileNotFoundException e) { // 捕获特定异常,给出明确提示 System.err.println("错误:找不到test.txt文件"); // 打印异常详细信息(调试用) e.printStackTrace(); } finally { // 无论是否出错,最终都会执行(用于释放资源) try { if (fr != null) { fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } }

总结

  1. 运行时异常:多是代码逻辑问题,重点在「预判和避免」(如判空、校验参数),而非单纯捕获;
  2. 编译时异常:多是外部环境问题,Java 强制要求处理(try-catchthrows);
  3. 核心原则:异常处理要「精准」(捕获具体异常,而非全用 Exception),且要给出明确的错误提示,方便排查问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:44:12

企业IT管理:批量部署管理员CMD权限方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个PowerShell脚本&#xff0c;用于企业域环境中批量配置用户以管理员身份运行CMD的权限。脚本应支持AD用户组筛选、权限验证和操作日志记录功能&#xff0c;输出格式为.ps1文…

作者头像 李华
网站建设 2026/4/18 10:28:31

VBA 7.1 vs 传统开发:WPS办公效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比工具&#xff0c;展示VBA 7.1插件相比传统方法的效率提升&#xff1a;1.包含典型操作耗时对比(如批量处理1000行数据)&#xff1b;2.内存占用监控功能&#xff1b…

作者头像 李华
网站建设 2026/4/13 9:55:42

让大模型记住你:基于Llama Factory的持续学习与灾难性遗忘规避实战

让大模型记住你&#xff1a;基于Llama Factory的持续学习与灾难性遗忘规避实战 你是否遇到过这样的困扰&#xff1a;每次微调大语言模型时&#xff0c;新学到的知识总会覆盖掉之前掌握的技能&#xff1f;这种现象被称为"灾难性遗忘"&#xff0c;它迫使开发者不得不反…

作者头像 李华
网站建设 2026/4/14 6:49:04

大模型协作开发指南:使用Llama Factory实现团队级微调版本管理

大模型协作开发指南&#xff1a;使用Llama Factory实现团队级微调版本管理 在大模型开发过程中&#xff0c;技术团队常常面临一个棘手问题&#xff1a;团队成员各自微调的模型版本混乱&#xff0c;效果无法横向比较。这就像一群开发者同时修改同一份代码却没有版本控制系统&…

作者头像 李华
网站建设 2026/4/23 12:41:57

【值得收藏】护网行动揭秘:网络安全红蓝对抗实战指南

什么是护网行动&#xff1f; 护网行动是以公安部牵头的&#xff0c;用以评估企事业单位的网络安全的活动。 具体实践中。公安部会组织攻防两方&#xff0c;进攻方会在一个月内对防守方发动网络攻击&#xff0c;检测出防守方&#xff08;企事业单位&#xff09;存在的安全漏洞…

作者头像 李华
网站建设 2026/4/18 1:51:10

5分钟快速搭建MySQL8.0.44测试环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个快速部署MySQL8.0.44测试环境的方案&#xff0c;要求&#xff1a;1. 使用Docker容器化部署 2. 包含预配置的管理员账户 3. 示例数据库导入功能 4. 持久化存储设置 5. 端…

作者头像 李华