news 2026/3/7 17:54:44

java基础 异常(Exception和Error)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java基础 异常(Exception和Error)

在 Java 中,Exception 和 Error 都是 Throwable 类的直接子类,是 Java 异常处理机制的核心组成部分。它们代表程序运行过程中可能出现的不同类型的“异常情况”,但用途、严重程度和处理方式有本质区别。

文章目录

    • `Error`:JVM 或系统级严重错误
      • 特点:
    • `Exception`:程序可处理的异常
      • 特点:
    • 一、常见Error
      • 1. **OutOfMemoryError(内存溢出错误)**
      • 2. **StackOverflowError(栈溢出错误)**
      • 3. **NoClassDefFoundError(找不到类定义错误)**
    • 二、常见的受检异常
        • 1. **IOException(输入输出异常)**
        • 2. **SQLException(SQL 数据库访问异常)**
        • 3. **ClassNotFoundException**
    • 三、常见的运行时异常
        • 1. **NullPointerException(空指针异常)**
        • 2. **ArrayIndexOutOfBoundsException(数组越界异常)**
        • 3. **IllegalArgumentException(非法参数异常)**

Error:JVM 或系统级严重错误

特点:

  • 表示应用程序无法处理的严重问题
  • 通常由JVM 自身故障、资源耗尽或底层系统崩溃引起;
  • 不期望被应用程序捕获或恢复(即使技术上可以catch);
  • 属于非受检(Unchecked)—— 编译器不要求处理。

Exception:程序可处理的异常

特点:

  • 表示程序运行中可能出现的、合理的异常情况
  • 应用程序应该预期并处理这些异常
  • 分为两类:
    • 受检异常(Checked Exception)
    • 非受检异常(Unchecked Exception) = RuntimeException 及其子类

一、常见Error

1.OutOfMemoryError(内存溢出错误)

  • 原因:JVM 没有足够的内存来完成操作。
  • 常见场景
    • 堆内存不足(Java heap space):对象太多,GC 无法回收。
    • 永久代/元空间不足(MetaspacePermGen space):加载了太多类。
    • 直接内存不足(Direct buffer memory):使用ByteBuffer.allocateDirect()过多。
    • 栈内存不足(较少见,通常表现为StackOverflowError)。

2.StackOverflowError(栈溢出错误)

  • 原因:线程调用栈深度过大,通常是无限递归导致。
  • 特点:每个方法调用都会占用栈帧,递归太深会耗尽栈空间。

3.NoClassDefFoundError(找不到类定义错误)

  • 原因:JVM 在运行时尝试加载某个类时,该类在编译时存在,但运行时找不到
  • 常见原因
    • 类路径(classpath)缺失 JAR 包;
    • 静态初始化块抛出异常,导致类加载失败;
    • 依赖的类被删除或重命名。
  • 注意:不同于ClassNotFoundException(属于Exception),NoClassDefFoundErrorError,发生在已经成功加载过类之后再次使用时找不到

二、常见的受检异常

1.IOException(输入输出异常)
  • java.io
  • 用途:表示 I/O 操作失败,如文件读写、网络通信等。
  • 常见子类
    • FileNotFoundException:试图打开不存在的文件。
    • EOFException:读取到数据末尾(用于对象流等)。
    • SocketTimeoutException:网络超时。

2.SQLException(SQL 数据库访问异常)
  • java.sql
  • 用途:JDBC 操作数据库时发生错误(如连接失败、SQL 语法错误、权限不足等)。
  • 特点:几乎所有 JDBC 方法都声明抛出此异常。

3.ClassNotFoundException
  • java.lang
  • 用途:通过字符串动态加载类时(如Class.forName()),指定的类在 classpath 中找不到。
  • 注意:与NoClassDefFoundError(Error)不同,这是受检异常,发生在“主动加载类”的时候。

三、常见的运行时异常

1.NullPointerException(空指针异常)
  • 原因:试图访问一个null对象的成员(方法、字段等)。
  • 最常见、最经典的运行时异常

2.ArrayIndexOutOfBoundsException(数组越界异常)
  • 原因:访问数组时下标超出[0, length - 1]范围。

3.IllegalArgumentException(非法参数异常)
  • 原因:向方法传递了不合法或不合适的参数。
  • 常用于 API 设计中主动校验参数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/7 17:01:17

基于Verilog的组合逻辑电路建模:语法与规范

从零构建可靠的组合逻辑:Verilog建模实战精要你有没有遇到过这样的情况?仿真时一切正常,波形完美,结果正确——可一进综合工具,就冒出一堆“latch inference”的警告。更糟的是,FPGA跑起来后某些输入组合下…

作者头像 李华
网站建设 2026/3/7 8:27:42

零基础理解蜂鸣器电路原理图:通俗解释核心组成

从“滴”一声开始:拆解蜂鸣器背后的电路逻辑你有没有想过,按下微波炉按钮时那声清脆的“滴”,是怎么来的?或者,智能门锁识别失败时那一声短促的“哔——”,背后究竟发生了什么电子魔法?其实&…

作者头像 李华
网站建设 2026/3/6 16:37:49

Xilinx Ultrascale+中实现XDMA双工通信的从零实现

从零构建XDMA双工通信:在Xilinx Ultrascale上打通高速PCIe数据通路 你有没有遇到过这样的场景?FPGA采集了海量图像或雷达回波数据,却卡在“怎么快速传给主机”这一关。传统的USB、千兆以太网早已力不从心,而CPU轮询搬运又占资源、…

作者头像 李华
网站建设 2026/3/6 20:51:09

DAY 48随机函数与广播机制

一、 随机张量的生成 在深度学习中经常需要随机生成一些张量,比如权重的初始化,或者计算输入纬度经过模块后输出的维度,都可以用一个随机函数来实现需要的张量格式,而无需像之前一样必须加载一张真实的图片。 随机函数的种类很多…

作者头像 李华
网站建设 2026/3/4 21:55:32

Windows 11下Multisim安装操作指南

如何在 Windows 11 上顺利安装 Multisim?一份来自实战的避坑指南 最近帮实验室几位同学装 Multisim,发现很多人卡在第一步—— 系统明明是 Win11,配置也不低,怎么点一下 setup.exe 就报错、卡死甚至直接退出? 别急。…

作者头像 李华
网站建设 2026/3/4 12:51:03

无源蜂鸣器驱动设计入门必看:基础原理与电路连接

无源蜂鸣器驱动设计实战指南:从原理到代码,彻底搞懂“嘀”一声背后的秘密你有没有遇到过这种情况:明明代码烧录成功、接线也检查了三遍,可一上电——蜂鸣器就是不响?或者声音微弱得像蚊子叫,甚至MCU莫名其妙…

作者头像 李华