一文讲解Java中的异常处理机制

Java中的异常处理机制用于处理程序运行过程中可能发生的各种异常情况,通常通过try-catch-finally语句和throw关键字来实现
在这里插入图片描述

  • Throwable是Java语言中所有错误和异常的父类。它有两个主要的子类:Error和Exception;
  • Error类代表那些严重的错误,这类错误通常是程序没法处理的,比如OutOfMemory内存不足,StackOverflowError栈溢出。这些错误通常都和JVM的运行状态有关,一旦发生,应用程序通常就没法恢复;
  • Exception类代表可以处理的异常,它分为两大类:编译时异常Checked Exception 和运行时异常Runtime Exception;
    1. 编译时异常,这类异常在编译时必须被显式处理,捕获或者声明抛出,常见的有IOException、SQLexception等;
    2. 运行时异常。这类异常在运行时抛出,它们都是RuntimeException的子类。对于运行时异常,Java编译器不要求必须处理它们;运行时异常通常是由程序逻辑错误导致的,比如NullPointerException、IndexOutOfBoundsException 等。

问一个问题,catch和finally的异常可以同时抛出吗?

  • 如果catch块抛出一个异常,而finally块中也抛出异常,那么最终抛出的异常将是finally块中的异常。catch块中的异常会被丢弃,而finally块中的异常会覆盖并向上传递;

    public class Example {public static void main(String[] args) {try {throw new Exception("Exception in try");} catch (Exception e) {throw new RuntimeException("Exception in catch");} finally {throw new IllegalArgumentException("Exception in finally");}}
    }
    
    • try 块首先抛出一个 Exception。
    • 控制流进入 catch 块,catch 块中又抛出了一个 RuntimeException。
    • 但是在 finally 块中,抛出了一个 IllegalArgumentException,最终程序抛出的异常是 finally 块中的 IllegalArgumentException。

    虽然 catch 和 finally 中的异常不能同时抛出,但可以手动捕获 finally 块中的异常,并将 catch 块中的异常保留下来,避免被覆盖。常见的做法是使用一个变量临时存储 catch 中的异常,然后在 finally 中处理该异常:

    public class Example {public static void main(String[] args) {Exception catchException = null;try {throw new Exception("Exception in try");} catch (Exception e) {catchException = e;throw new RuntimeException("Exception in catch");} finally {try {throw new IllegalArgumentException("Exception in finally");} catch (IllegalArgumentException e) {if (catchException != null) {System.out.println("Catch exception: " + catchException.getMessage());}System.out.println("Finally exception: " + e.getMessage());}}}
    }
    

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

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

相关文章

论文速读|Matrix-SSL:Matrix Information Theory for Self-Supervised Learning.ICML24

论文地址:Matrix Information Theory for Self-Supervised Learning 代码地址:https://github.com/yifanzhang-pro/matrix-ssl bib引用: article{zhang2023matrix,title{Matrix Information Theory for Self-Supervised Learning},author{Zh…

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言 在分布式系统中,雪崩效应(Avalanche Effect)是一种常见的故障现象,通常发生在系统中某个组件出现故障时,导致其他组件级联失败,最终引发整个系统的崩溃。为了有效应对雪崩效应,服务保护方…

【NLP251】意图识别 与 Seq2Seq

Seq2Seq模型作为从RNN演进到Transformer和Attention机制的关键中间阶段,它不仅承前启后,还为我们深入理解这些复杂的模型架构提供了重要的基础。接下来,我们将详细探讨Seq2Seq模型的原理及其在自然语言处理领域中的应用。 1. 原理及网络框架 …

docker配置mysql并使用mysql connector cpp编程

mysql 配置mysql使用docker 这里使用docker安装了,比较简洁,不想使用了直接就可以把容器删掉,首先获取下镜像,如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回!!! 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

【16届蓝桥杯寒假刷题营】第2期DAY4

【16届蓝桥杯寒假刷题营】第2期DAY4 - 蓝桥云课 问题描述 幼儿园小班的浩楠同学有一个序列 a。 他想知道有多少个整数三元组 (i,j,k) 满足 1≤i,j,k≤n 且 ai​aj​ak​。 输入格式 共2行,第一行一个整数 n,表示序列的长度。 第二行 n 个整数&#x…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计,系统的结构框图如图2.1所示。其中包括了按键模块,温度检测模块,超声波液位检测模块,显示模块,蜂鸣器等器件设备。其中,采用STC89C52单片机作为主控…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用

论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型,并部署了在线服务接口。供给客户端(如:鸿蒙APP/元服务)调用。 import核心能力: import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…

Linux工具使用

1.gcc/g的使用 1.1程序翻译的过程 ①预处理:展开头文件,替换宏,调节编译,去注释。 ②编译:将代码变成汇编语言 ③汇编:将汇编代码变成二进制不可执行的目标文件。 ④链接:将多个我写的多个…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存在病毒),那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable,取消验证模式&#…

单细胞-第五节 多样本数据分析,打分R包AUCell

文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题:RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者:Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接:https://arxiv.org/ab…

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 ,数据类型是非常重要的概念,因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言,这意味着变量的数…

【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开

之前在Vmware虚拟机里配置了mumu模拟器,现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统,对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项,启用共享文件夹 3、复…

DeepSeek介绍及使用ollama本地化部署DeepSeek-R1大模型

DeepSeek 中文名深度求索人工智能基础技术研究有限公司(简称“深度求索”或“DeepSeek”),成立于2023年,是一家专注于实现AGI的中国公司。 在本月初推出 DeepSeek-R1后,该公司宣称其在执行数学、编码和自然语言推理等任务时“性能可与OpenAI…

金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南

前言 OceanBase数据库作为国产自主可控的分布式数据库,在金融、电商、政务等领域得到广泛应用,优化OceanBase数据库的查询性能变得愈发重要。PawSQL为OceanBase数据库提供了全方位的SQL性能优化支持,助力用户充分发挥OceanBase数据库的性能潜…

简要介绍C语言与c++共有的数学函数

C语言和C都提供了丰富的数学函数&#xff0c;这些函数主要定义在 <math.h>&#xff08;C语言&#xff09;和 <cmath>&#xff08;C&#xff09;头文件中。以下分别介绍C语言与C共有的数学函数&#xff0c;以及C特有的数学函数。 C语言与C共有的数学函数&#xff08…

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司&#xff0c;恶补相关知识。 概念 一些概念&#xff1a; HPC&#xff1a;High Performance Computing&#xff0c;高性能计算SoC&#xff1a;System on Chip&#xff0c;单片系统FLOPS&#xff1a;Floating Point Operations Per Second&am…