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 无法回收。
    • 永久代/元空间不足(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 设计中主动校验参数

相关推荐
Volunteer Technology2 分钟前
Sentinel的限流算法
java·python·算法
岁岁种桃花儿4 分钟前
SpringCloud从入门到上天:Nacos做微服务注册中心
java·spring cloud·微服务
jdyzzy4 分钟前
什么是 JIT 精益生产模式?它与传统的生产管控方式有何不同?
java·大数据·人工智能·jit
Chasmれ9 分钟前
Spring Boot 1.x(基于Spring 4)中使用Java 8实现Token
java·spring boot·spring
froginwe1110 分钟前
Python 条件语句
开发语言
汤姆yu11 分钟前
2026基于springboot的在线招聘系统
java·spring boot·后端
七夜zippoe13 分钟前
Python统计分析实战:从描述统计到假设检验的完整指南
开发语言·python·统计分析·置信区间·概率分布
2601_9491465320 分钟前
Python语音通知API示例代码汇总:基于Requests库的语音接口调用实战
开发语言·python
3GPP仿真实验室26 分钟前
【Matlab源码】6G候选波形:OFDM-IM 索引调制仿真平台
开发语言·matlab
计算机学姐36 分钟前
基于SpringBoot的校园社团管理系统
java·vue.js·spring boot·后端·spring·信息可视化·推荐算法