java基础 异常(Exception和Error)

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

文章目录

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

Error:JVM 或系统级严重错误

特点:

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

Exception:程序可处理的异常

特点:

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

一、常见Error

1. OutOfMemoryError(内存溢出错误)

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

2. StackOverflowError(栈溢出错误)

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

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

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

二、常见的受检异常

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 设计中主动校验参数。

相关推荐
开开心心就好36 分钟前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
code2cat41 分钟前
Java高级篇之Socket:从建立连接到完整收发一条消息
java·开发语言
凯瑟琳.奥古斯特1 小时前
OCR文字检测算法对比解析
开发语言·python·职场和发展
PD我是你的真爱粉1 小时前
成熟Agent系统设计深度研究报告
java·大数据·人工智能
Misnice1 小时前
Python 内置函数大全
开发语言·windows·python
美狐美颜SDK开放平台1 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk
怪我冷i1 小时前
Rust 核心语法与内存安全机制
开发语言·安全·rust
鶴哥只手遮天1 小时前
Spring AI Alibaba 深度技术系列-第 05 章 编译与执行引擎:CompiledGraph、GraphRunner与三段式 Executor
java·人工智能·开源
开开心心_Every2 小时前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·spring·智能手机·word·winrar
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统