讲师中心 微信公众号
AI工具推荐 视频效率加速

常见的异常类有哪些?

阿枫吖_8112

阿枫吖_8112

发布时间:2026-01-01 08:24:51

|

940人浏览过

|

来源于php中文网

原创

Java异常类分为Error和Exception,Error指JVM无法处理的严重问题,如OutOfMemoryError和StackOverflowError;Exception包括编译时必须处理的Checked Exception(如IOException、SQLException)和运行时的Unchecked Exception(如NullPointerException、ArrayIndexOutOfBoundsException)。选择异常类应根据问题具体性,可自定义继承Exception或RuntimeException。最佳实践包括:只捕获可处理的异常、不忽略异常、使用try-with-resources、避免finally块抛异常、记录详细日志。应在无法处理错误时抛出异常,但避免滥用以影响性能。

常见的异常类有哪些?

常见的异常类,简单来说,就是程序运行过程中可能遇到的各种“不正常”情况的类型。它们是Java异常处理机制的基础,理解这些异常类能帮助我们更好地编写健壮的代码。

解决方案

Java的异常类主要分为两大类:Throwable 的子类 Error 和 Exception。

  • Error: 通常指的是JVM(Java虚拟机)级别的错误,例如OutOfMemoryError(内存溢出)、StackOverflowError(栈溢出)等。这类错误通常是程序无法处理的,只能通过调整JVM参数或者修改代码来避免。 举个例子,如果你递归调用一个方法,没有设置合适的退出条件,很可能就会导致StackOverflowError。 我曾经遇到过一个项目,由于日志文件配置不当,导致日志文件无限增长,最终耗尽了所有内存,引发了OutOfMemoryError。 这种情况下,我们需要检查并修正日志配置,而不是简单地捕获这个错误。

  • Exception: 表示程序可以处理的异常。 Exception又分为两种:

    Java Api Extractor
    Java Api Extractor

    从 Java 项目中提取 Controller 层接口定义为 JSON 数据。

    下载
    • Checked Exception(受检异常): 这类异常在编译时就需要处理,要么使用try-catch块捕获,要么使用throws关键字声明抛出。 例如IOException(输入输出异常)、SQLException(数据库异常)等。 如果你试图读取一个不存在的文件,就会抛出IOException。 编译器会强制你处理这个异常,否则代码无法通过编译。
    • Unchecked Exception(非受检异常): 这类异常在编译时不需要强制处理,通常是由于程序逻辑错误导致的。 例如NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组越界异常)、IllegalArgumentException(非法参数异常)等。 NullPointerException 应该是每个Java程序员都遇到过的噩梦。 我曾经在处理一个复杂的对象关系时,忘记对某个对象进行判空,结果在调用该对象的方法时,就抛出了NullPointerException。 这类异常需要我们仔细检查代码逻辑,避免出现空指针。

常见的RuntimeException(非受检异常)的子类:

  • NullPointerException: 当在需要对象的地方使用了null时抛出。 这个异常太常见了,以至于很多IDE都提供了自动判空的功能。
  • ArrayIndexOutOfBoundsException: 当访问数组时,使用的索引超出了数组的范围时抛出。 我曾经在循环遍历数组时,由于循环条件设置错误,导致访问了数组的最后一个元素之后的位置,引发了这个异常。
  • IllegalArgumentException: 当方法接收到的参数不合法时抛出。 例如,你可能需要验证输入的参数是否在某个范围内,如果不在,就抛出这个异常。
  • NumberFormatException: 当试图将一个字符串转换为数字,但字符串的格式不正确时抛出。 例如,你试图将 "abc" 转换为整数,就会抛出这个异常。
  • ClassCastException: 当试图将一个对象强制转换为不是其实例的类型时抛出。 例如,你试图将一个String对象强制转换为Integer对象,就会抛出这个异常。
  • ArithmeticException: 当发生算术错误时抛出,例如除以零。

Checked Exception的例子:

  • IOException: 处理输入输出操作时可能发生的异常,例如文件不存在、网络连接中断等。
  • SQLException: 处理数据库操作时可能发生的异常,例如数据库连接失败、SQL语法错误等。
  • ClassNotFoundException: 当试图加载一个不存在的类时抛出。

如何选择合适的异常类?

选择合适的异常类,其实就是选择最能准确描述问题的异常类。 如果Java提供的异常类已经能够满足你的需求,那就直接使用它们。 如果Java提供的异常类不够具体,你可以考虑自定义异常类。 自定义异常类通常继承自Exception或者RuntimeException。 继承自Exception的自定义异常类是Checked Exception,需要强制处理;继承自RuntimeException的自定义异常类是Unchecked Exception,不需要强制处理。 我通常会选择继承自RuntimeException,因为我觉得强制处理所有异常会增加代码的复杂度。 当然,这取决于具体的业务场景。 如果某个异常的发生概率很高,并且需要立即处理,那就应该选择Checked Exception。

异常处理的最佳实践是什么?

异常处理不仅仅是简单地捕获异常并打印日志。 好的异常处理应该能够帮助我们快速定位问题,并且尽可能地恢复程序的状态。 以下是一些异常处理的最佳实践:

  • 不要捕获所有异常: 只捕获你能够处理的异常。 如果你无法处理某个异常,那就应该将它抛出,让上层调用者来处理。
  • 不要忽略异常: 捕获异常之后,一定要做一些处理。 至少应该打印日志,方便我们排查问题。
  • 使用try-with-resources语句: 对于实现了AutoCloseable接口的资源,应该使用try-with-resources语句来自动关闭资源,避免资源泄露。
  • 自定义异常类: 如果Java提供的异常类不够具体,可以考虑自定义异常类。
  • 避免在finally块中抛出异常: 如果在finally块中抛出异常,可能会覆盖之前的异常信息,导致我们无法定位到真正的问题。
  • 记录足够的信息: 在打印异常日志时,应该记录足够的信息,例如异常发生的时间、线程、类名、方法名、参数等。 这样可以帮助我们快速定位问题。

什么时候应该抛出异常?

抛出异常的时机也很重要。 一般来说,当遇到无法处理的错误时,就应该抛出异常。 例如,当方法接收到不合法的参数时,或者当方法无法完成预期的功能时。 抛出异常可以通知调用者发生了错误,并且可以中断程序的执行,避免产生不可预料的后果。 但是,不要滥用异常。 异常处理的代价很高,会影响程序的性能。 对于一些可以预料的错误,可以使用返回值来表示。 例如,如果方法需要返回一个对象,但是该对象不存在,可以返回null,而不是抛出异常。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4763

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

971

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1249

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6781

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3483

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6760

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9361

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1270

2024.04.29

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
DBeaver生态工具dbvr官方手册
DBeaver生态工具dbvr官方手册

共0课时 | 0人学习

DBeaver SQL编辑器使用手册
DBeaver SQL编辑器使用手册

共0课时 | 0人学习

DBeaver数据库连接指南
DBeaver数据库连接指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn