JAVA异常体系

在 Java 里,异常体系是其错误处理机制的核心内容,它能够帮助开发者有效应对程序运行时出现的各种意外状况。

异常体系的基本架构

它主要包含两个重要分支:

  1. Error(错误):这类异常是程序自身无法处理的严重问题,像OutOfMemoryErrorStackOverflowError就属于此类。一般而言,开发者不需要针对这类异常编写特别的处理代码。
  2. Exception(异常):这是程序在运行过程中能够捕获和处理的异常。它又可以进一步细分为:
    • 受检查异常(Checked Exception):这类异常在编译阶段就会被检查,例如IOExceptionSQLException。程序必须对它们进行捕获或者声明抛出。
    • 运行时异常(RuntimeException):也被称作非受检查异常,像NullPointerExceptionArrayIndexOutOfBoundsException都属于此类。编译时不会强制要求处理这类异常。

 

 Error

在 Java 中,ErrorThrowable类的子类,用于表示系统级的严重故障,通常无法通过程序恢复。

一、特点

  • 不可恢复:表示 JVM 或系统级的严重问题,程序通常无法处理。
  • 不强制捕获:编译器不会检查 Error,也不要求代码处理它。
  • 避免捕获:捕获 Error 可能导致程序进入不稳定状态。

二、常见的 Error 类型

1. 内存相关错误

OutOfMemoryError:内存不足,无法分配对象。

// 示例:创建过大的数组可能导致OutOfMemoryError
byte[] array = new byte[Integer.MAX_VALUE];

 StackOverflowError:方法调用栈深度超过限制(常见于递归无终止条件)。

// 示例:无限递归导致StackOverflowError
public void recursive() {recursive(); // 最终栈溢出
}

2. 类加载相关错误

  • NoClassDefFoundError:编译时存在的类,运行时找不到(如依赖库缺失)。
  • ClassFormatError:类文件格式错误(如.class 文件损坏)。

3. JVM 内部错误

  • InternalError:JVM 内部发生错误(如 JIT 编译器故障)。
  • VirtualMachineError:JVM 崩溃或无法继续运行的严重错误。

Exception

受检查异常(Checked Exception)

特点

  • 在编译阶段就会被编译器检查。
  • 程序必须对这类异常进行处理,处理方式有两种:要么使用try-catch语句捕获,要么在方法签名中用throws声明抛出
  • 一般是由程序外部的因素引发的,比如文件系统、网络或者数据库等出现问题。

常见示例

  1. IOException:在进行输入输出操作时,如果出现错误,就会抛出此异常。例如,尝试读取一个不存在的文件时。
  2. SQLException:在访问数据库时,如果出现错误,会引发该异常。比如 SQL 语句执行失败。
  3. ClassNotFoundException:当使用反射机制加载类,却找不到指定的类时,会产生此异常。
  4. InterruptedException:当一个线程被另一个线程中断时,会抛出此异常。

处理方式 

import java.io.FileInputStream;
import java.io.IOException;public class CheckedExceptionExample {public static void main(String[] args) {try {readFile(); // 必须捕获或声明抛出} catch (IOException e) {e.printStackTrace();}}public static void readFile() throws IOException {FileInputStream file = new FileInputStream("non_existent_file.txt");}
}

运行时异常(RuntimeException)

特点

  • 属于RuntimeException的子类
  • 编译时不会强制要求处理这类异常,也就是说可以不捕获,也不用在方法签名中声明。
  • 通常是由程序中的逻辑错误导致的,比如空指针引用、数组越界等

常见示例

  1. NullPointerException:当尝试访问空对象的方法或属性时会抛出此异常
String str = null;
System.out.println(str.length()); // 抛出NullPointerException

      2.ArrayIndexOutOfBoundsException:访问数组时,如果使用的索引超出了数组的有效范围,就会引发该异常。

int[] arr = new int[5];
System.out.println(arr[10]); // 抛出ArrayIndexOutOfBoundsException

      3.ArithmeticException:进行数学运算时,若出现非法操作,比如除以零,就会抛出此异常。

int result = 10 / 0; // 抛出ArithmeticException

      4.IllegalArgumentException:当传入的参数不符合方法的要求时,会产生该异常。

public void setAge(int age) {if (age < 0) {throw new IllegalArgumentException("年龄不能为负数");}
}

 

 受检查异常 vs 运行时异常

对比项受检查异常(Checked Exception)运行时异常(RuntimeException)
编译时检查必须处理,否则编译不通过不强制要求处理
继承关系继承自Exception类(但不包括RuntimeException继承自RuntimeException
常见场景外部资源访问(文件、网络、数据库等)程序逻辑错误(空指针、数组越界等)
处理方式捕获(try-catch)或声明抛出(throws)可不处理,通过代码逻辑避免

异常和错误的区别

对比项异常(Exception)错误(Error)
设计目的表示程序可处理的意外情况,如文件不存在、网络中断。表示系统级不可恢复的严重故障,如内存溢出、栈溢出。
处理要求受检查异常必须被捕获或声明抛出;
运行时异常可选择性处理。
通常不捕获,也不应该尝试处理,而是让程序终止。
常见子类IOExceptionSQLExceptionNullPointerExceptionOutOfMemoryErrorStackOverflowErrorNoClassDefFoundError
代码示例java<br>try {<br> FileInputStream file = new FileInputStream("test.txt");<br>} catch (FileNotFoundException e) {<br> e.printStackTrace();<br>}<br>java<br>public void recursive() {<br> recursive(); // 最终导致StackOverflowError<br>}<br>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 去掉右边table的下拉条与下面的白色边框并补充满

::v-deep table {width: 100% !important; } ::v-deep .el-table::after, .el-table::before {display: none !important; }/* 隐藏滚动条但保留滚动功能 */ ::v-deep .el-table__body-wrapper::-webkit-scrollbar {width: 0 !important;height: 0 !important; }::v-deep .el-t…

uniapp+vue3+uview来开发我们的项目

前言&#xff1a; 就像我们vue的web的框架element、iview等一样&#xff0c;我们的uni-app开发也有适合的他的框架&#xff0c;除了他本身的扩展组件以外&#xff0c;第三方好用的就是就是uview了。 实现效果&#xff1a; 官网信息&#xff1a; vue2版本&#xff1a;uview-ui …

数据仓库:企业数据管理的核心引擎

一、数据仓库的由来 数据仓库&#xff08;Data Warehouse, DW&#xff09;概念的诞生源于企业对数据价值的深度挖掘需求。在1980年代&#xff0c;随着OLTP&#xff08;联机事务处理&#xff09;系统在企业中的普及&#xff0c;传统关系型数据库在处理海量数据分析时显露出明显瓶…

YOLOv12模型部署(保姆级)

一、下载YOLOv12源码 1.通过网盘分享的文件&#xff1a;YOLOv12 链接: https://pan.baidu.com/s/12-DEbWx1Gu7dC-ehIIaKtQ 提取码: sgqy &#xff08;网盘下载&#xff09; 2.进入github克隆YOLOv12源码包 二、安装Anaconda/pycharm 点击获取官网链接(anaconda) 点击获取…

一篇解决Redis:持久化机制

目录 认识持久化 持久化方案 RDB&#xff08;Redis DataBase&#xff09; 手动触发 自动触发 小结 AOF(Append-Only File) AOF缓冲区刷新机制 AOF重写机制 AOF重写流程 ​编辑 混合持久化 认识持久化 我们都知道Mysql有四大特征&#xff0c;原子性&#xff0c;持久…

从 Vue3 回望 Vue2:事件总线的前世今生

从 Vue3 回望 Vue2&#xff1a;事件总线的前世今生 以 Vue3 开发者视角回顾 Vue2 中事件总线机制 的文章。文章将围绕事件总线的缘起、用法、局限与演进展开&#xff0c;帮助 Vue3 开发者理解 Vue2 通信方式的历史意义及现代替代方案。 一、前言&#xff1a;Vue3 时代&#xff…

CSS结构性伪类、UI伪类与动态伪类全解析:从文档结构到交互状态的精准选择

一、结构性伪类选择器&#xff1a;文档树中的位置导航器 结构性伪类选择器是CSS中基于元素在HTML文档树中的层级关系、位置索引或结构特征进行匹配的一类选择器。它们无需依赖具体的类名或ID&#xff0c;仅通过文档结构即可精准定位元素&#xff0c;是实现响应式布局和复杂文档…

【SSL证书系列】SSL证书工作原理解读

SSL&#xff08;Secure Sockets Layer&#xff09;及其继任者TLS&#xff08;Transport Layer Security&#xff09;是用于保护网络通信安全的加密协议。SSL证书是实现HTTPS协议的核心&#xff0c;其工作原理涉及加密技术、身份验证和信任机制。以下是其工作原理的详细分步解析…

第二十四天打卡

import os os.getcwd() os.listdir() path_a r"C:\Users\renshuaicheng\Documents" path_b "MyProjectData" file "results.csv" file_path os.path.join(path_a,path_b,file) file_path import osstart_directory os.getcwd() # 假设这个目…

【CUDA】Sgemm单精度矩阵乘法(下)

目录 前言1. 优化技巧5&#xff1a;使用register模拟二级缓存&#xff08;内积转外积&#xff09;2. 优化技巧6&#xff1a;使用register模拟二级缓存 float43. 优化技巧7&#xff1a;global memory转置再存放shared memory4. 优化技巧8&#xff1a;使用double buffer加速矩阵…

【1000以内具有12个以上因子的整数并输出它的因子】2021-12-27

缘由c语言输入1000以内具有12个以上因子的整数 并输出它的因子-编程语言-CSDN问答 int 求因子个数(int 数, int* 因子 { 0 }) {//缘由https://bbs.csdn.net/topics/399168406int 和 0, 求 1, 商 0, 含 0;//因子不含1和数本身while (求 < (商 数 / 求))if (!(数 % 求)…

C#中的dynamic与var:看似相似却迥然不同

在C#编程的世界里&#xff0c;var和dynamic这两个关键字常常让初学者感到困惑。它们看起来都在定义变量时省略了显式类型声明&#xff0c;但实际上它们的工作方式和应用场景有着天壤之别。今天&#xff0c;让我们一起揭开这两个关键字的神秘面纱。 var&#xff1a;编译时的类型…

流速仪数据处理及流量断面线绘制

1 需求描述 在实际航道测量项目中&#xff0c;有测量断面线流量流速的需求&#xff0c;得使用流速仪在现场进行测量&#xff0c;相关操作在之前已经写了记录。本次手册记录后期数据处理与流量线绘制&#xff0c;以该区域为例。 流速仪设备操作说明 2 规范要求 3 流量断面表格…

购物车构件示例

通用购物车构件设计 注:代码仅用于演示原理,不可用于生产环境。 一、设计目标 设计一个高度可复用的购物车构件,具备以下特点: 与具体业务系统解耦支持多种应用场景(商城、积分系统等)提供标准化接口易于集成和扩展二、核心架构设计 1. 分层架构 ┌─────────…

数据结构·字典树

字典树trie 顾名思义&#xff0c;在一个字符串的集合里查询某个字符串是否存在树形结构。 树存储方式上用的是结构体数组&#xff0c;类似满二叉树的形式。 模板 定义结构体和trie 结构体必须的内容&#xff1a;当前结点的字符&#xff0c;孩子数组可选&#xff1a;end用于查…

ES面试题系列「一」

1、Elasticsearch 是什么&#xff1f;它与传统数据库有什么区别&#xff1f; 答案&#xff1a;Elasticsearch 是一个基于 Lucene 的分布式、开源的搜索和分析引擎&#xff0c;主要用于处理大量的文本数据&#xff0c;提供快速的搜索和分析功能。与传统数据库相比&#xff0c;E…

2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码

引言 近年来&#xff0c;在合理框架内求解优化问题的元启发式算法的发展引起了全球科学界的极大关注。本期介绍一种新的元启发式算法——不实野燕麦优化算法Animated Oat Optimization algorithm&#xff0c;AOO。该算法模拟了不实野燕麦的3种独特行为&#xff0c;于2025年6月…

Agent Builder API - Agent Smith 扩展的后端服务(开源代码)

​一、软件介绍 文末提供程序和源码下载 Agent Builder API - Agent Smith 扩展的后端服务&#xff08;开源代码&#xff09;手动设置&#xff1a;在本地计算机中克隆此存储库并启动 python FAST API 服务器。&#xff08;可选&#xff09;安装并设置 Mongo DB。Dev Container…

C及C++的SOAP协议库

一.gSOAP gSOAP 是一个功能强大的开源工具包&#xff0c;专为 C 和 C 设计&#xff0c;用于快速开发基于 SOAP 协议的 Web 服务和客户端。 1.协议支持 SOAP 版本&#xff1a;完整支持 SOAP 1.1/1.2 规范&#xff0c;包括消息格式、编码规则和错误处理。 传输协议&#xff1a…

html5+css3实现傅里叶变换的动态展示效果(仅供参考)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>傅里叶变换的动态展示效果</title><sty…