初探Java 7异常处理功能增强

【51CTO译文】之前我们介绍过Java 7的最新特性更新和代码示例,今天我们来看看Java 7异常处理方面的功能增强。来自Coin项目的又一个细微语言增强已经被包含在Java 7中:由谷歌专任工程师兼Java讲师Neal Gafter提出的Java增强异常处理功能。Open JDK开发的领导者Joe Darcy已经在其博客上宣布了这个变化。

此次变动增加了两处对异常处理机制的细微增强:

◆Multicatch:开发者现在能够在一个catch代码块中捕获多个异常类型;

◆Final Rethrow:它可以让开发者捕获一个异常类型及其子类型,并且无需向方法声明中增加抛出子句,就能重新将其抛出。

过去我们在捕获多个异常类型时,往往会使用以下类型的代码:

} catch (FirstException ex) {  
    logger.error(ex);  
    throw ex;  
} catch (SecondException ex) {  
    logger.error(ex);  
    throw ex;  
}  

 但是以上代码除了冗长外没有什么优点。一个解决办法是找出这两个异常类型的共同子类型,只对其进行捕获并抛出。但是这种方法通常会捕获一些你并不需要的异常。

现在借助于新增的功能,开发者可以使用以下代码:

} catch (FirstException | SecondException ex) {  
    logger.error(ex);  
     throw ex;  
}

 

这种代码看上去要简洁清晰的多。

第二个增强功能要复杂一些。假如开发者希望捕获所有异常,在进行必要的几个操作后,再将其抛出。就代码编写而言并不是一件难事,但是开发者必须在方法声明中增加一个抛出子句,来管理自己代码发出的新异常。而现在借助于Final Rethrow,开发者无需增加一个异常抛出子句就能完成此项任务:

try {  
    // some code 
} catch (final Throwable ex) {  
    // some more code 
    throw ex;  
} 

 通过使用final关键字,开发者可以抛出所需的准确动态类型异常。这样如果一个IOException异常发生,那么IOException将被抛出。当然,开发者必须声明不被捕获的异常。如果开发者在try代码块(在//some more code部分)中没有捕获任何异常,抛出子句则与以前完全相同;反之如果捕获到某些异常,开发者则可以进行相应处理。

 

Java 7中的multi-catch是一个非常好的功能,但是final rethrow对程序员来说并不常用。

原文作者:Baptiste Wicht

原文题目:Better exception handling in Java 7 : Multicatch and final rethrow

JAVA中异常处理详解 异常(Exception)是程序执行期间发生的事件,它会中断程序的正常指令流。简单来说,异常是一个表示程序出现错误或异常状态的对象。在Java中,异常是一种特殊类型的对象,它从类继承而来。当方法遇到无法处理的情况时,会创建一个异常对象并将其"抛出",然后Java运行时系统会寻找能够"捕获"并处理这个异常的代码。当标准异常类不足以表达特定的错误情况时,可以创建自定义异常类。// 自定义已检查异常super("余额不足,还需 " + amount + " 元");// 使用自定义异常A6。 阅读详情

相关推荐

深入解析 Java 的异常处理机制

Java 允许开发者自定义异常,以便更精确地表示业务逻辑错误。throw new AgeException("年龄必须大于等于18岁");try {System.out.println("自定义异常: " + e.getMessage());

shrgegrb的博客 666

java 7 异常_java7 异常处理增强

在Java 7发行版中,oracle在异常处理机制上也做了一些不错的更改。这些主要是改进的catch块和多余的throws子句。让我们看看他们是如何改变的。1.改进了Java 7中的catch块在此功能中,现在您可以在单个catch块中捕获多个异常。在Java 7之前,您只能在每个catch块中仅捕获一个异常。要指定期望的例外列表,使用竖线('|')字符。Java程序可在单个catch块中捕获多个...

weixin_39834475的博客 177

Java 7/JDK 1.7新特性全面解读

Java 7中引入了新的文件系统API,位于包中。这个包中的Path和Files类提供了更为强大和灵活的文件操作功能。例如::检查文件是否存在,可以指定是否跟随符号链接。:读取文件属性,可以指定是否跟随符号链接。:创建文件,并可以指定文件的属性。

weixin_32661831的博客 1693

Java 异常处理

异常的概念 异常的体系结构 Java异常的处理机制 抛出异常 捕获异常 异常处理的基本语法 try-catch throw throws finally 问题扩展面试题 异常链 自定义异常 总结异常的概念异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out

爱是与世界平行 2719

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

数据标注工具:AiLabel.js实现标注 超详细教程 案例分享

背景:在前端开发过程中难免遇到针对图片的缩放平移;以及在图片上进行矢量数据、文本、标注的展示;如果你有上面的任何需求,恭喜你,找到组织了.... 在此背景下,AILabel.js出生了。 前面文章我们已经介绍过AiLabel.js了; https://blog.youkuaiyun.com/u012967771/article/details/113148527 npm下载地址:https://www.npmjs.com/package/ailabel github地址:https://github.com/d.

前端互助会 9365

Java提高篇——Java 异常处理

异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。 异常发生的原因有很多,通常包含以下几大类: ...

weixin_34174422的博客 690

# 多用户 JupyterHub 配置教程(通用 Linux 服务器版)

以上即是通用 Linux 服务器上的多用户 JupyterHub 实战配置。从安装认证与 Spawner 选择自动创建系统用户到反代与运维,覆盖了小团队到中等规模的主流场景。根据团队增长与合规要求,你可以进一步引入、统一身份源(LDAP/OAuth2/Keycloak)与资源配额治理,平滑演进到企业级部署。

数字化老司机 1288

JavaWeb学习笔记-spring-12-AOP-创建增强类(异常抛出增强)

异常抛出增强 public class TransactionManager implements ThrowsAdvice { //方法名必须为afterThrowing,前三个参数要么全提供,要么全不提供,最后一个参数为Throwable或其子类 //可以定义多个afterThrowing,依据抛出异常来进行增强 public void afterThrowing...

weixin0605的博客 415

5-DOF机械臂课程设计(一)之正逆运动学

文章目录基本要求基本概念关节坐标系的建立正运动学求解DH参数表的建立逆运动学求解多解下解的选取源码下载后续 基本要求 ​ 开发上位机程序,要求有良好的界面,能提供关节空间下和笛卡尔坐 标下表示的目标位姿点和中间若干经过点的输入功能,进行轨迹规划, 并控制机械臂沿轨迹运动,最终完成目标抓取的任务。 基本概念 连杆长度 :2个相邻关节轴线之间的距离 连杆扭角 :2个相邻关节轴线之间的角度 连杆偏距 :2个关节坐标系的X轴之间的距离 关节角度 :关节变量 计算时需要加初始角度偏移 关节坐标系的建立 ​ 根据《机

Rosen的博客 5855

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1005

Java异常处理:新特性演进之Java 7-17异常处理增强(7)

如果把Java异常处理比作汽车变速箱,Java 7是首次引入自动挡,Java 9升级为手自一体,Java 17则进化到自动驾驶。让我们驾驶这辆不断进化的汽车,体验各个版本带来的驾驶体验升级。

caishuangxi111的博客 1056

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1385

Java 7新特性深度解析:提升效率与功能

Java 7引入了许多新特性,这些特性不仅提升了编程效率,还增强了语言的功能性。其中最显著的是Fork/Join框架,它为并行计算提供了强大支持,特别适合解决分而治之的问题。通过Fork/Join,开发者能够更轻松地实现并行计算,有效利用多核处理器的性能,提高程序的执行效率。此外,Java 7还引入了自动资源管理(try-with-resources)语法,使得资源的释放更加简洁和可靠。新的二进制字面量和下划线数字分隔符提升了代码的可读性和编写效率。还有针对异常处理的改进,包括多异常捕获和重新抛出异常等。

忆~遂愿的博客 5833

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1003

IgH EtherCAT 从入门到精通:第 5 章 多主站与系统集成配置

本文介绍了 EtherCAT 多主站配置与系统集成方法。主要内容包括: 多主站实例配置原理:通过内核模块参数指定多个主站设备,每个主站独立管理一条 EtherCAT 总线,最多支持32个主站实例。 配置文件详解:在/etc/ethercat.conf中通过MASTER<X>_DEVICE变量定义各主站绑定的网卡或MAC地址,支持冗余备份配置。 系统服务集成:提供了systemd服务单元文件和传统init.d脚本两种方式实现开机自启动和管理,并建议通过override文件定制服务依赖关系。 架构示

从事嵌入式linux android驱动开发,拥有全栈能力 349

java7 异常处理增强

在Java 7发行版中,oracle在异常处理机制上也做了一些不错的更改。这些主要是改进的catch块和多余的throws子句。让我们看看他们是如何改变的。 1.改进了Java 7中的catch块 在此功能中,现在您可以在单个catch块中捕获多个异常。在Java 7之前,您只能在每个catch块中仅捕获一个异常。要指定期望的例外列表,使用竖线(’|’)字符。Java程序可在单个catch块中捕...

程序员石磊 665

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java7新特性之增强的异常处理功能

  此次变动增加了两处对异常处理机制的细微增强:   Multicatch:开发者现在能够在一个catch代码块中捕获多个异常类型;   Final Rethrow:它可以让开发者捕获一个异常类型及其子类型,并且无需向方法声明中增加抛出子句,就能重新将其抛出。   过去我们在捕获多个异常类型时,往往会使用以下类型的代码: } catch (FirstException ex)...

Leves’ Blog 194

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 异常处理机制

Java 的异常处理机制可以让程序具有极好的容错性,让程序更健壮。当程序运行出现意外情形时,系统会自动生成一个 Exception 对象来通知程序,实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。 本文包含: 使用 try…catch 捕获异常 异常类的继承体系 Java 7 提供的多异常捕获 访问异常信息 使用 finally 回收资源 异常处理的嵌套 Java 7 的自动...

黑白灰的博客 314

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java异常处理机制和异常链

基本异常 1,先捕获小异常再捕获大异常不然会出现错误!(已捕获异常异常) 2,Java7以前每个cath只能捕获一个异常,在Java7以后能捕获多个异常,异常用 | 分割,而且异常有隐式的final修饰,因此不能再对异常赋值,而且对有父子类关系的异常类不能用多异常捕获,多重捕获中的类型必须是不相交的(还是先处理小异常) catch (IndexOutOfBoundsException|NumberFormatException exception){ System.out.print

weixin_45099317的博客 446

Java异常处理机制

Java异常处理机制:Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现意外情形时,系 统会自动生成一个 Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离, 提供更好的可读性。 使用try...catch捕获异常 Java异常处理机制为:抛出异常,捕捉异常,处理异常。 try...catch语法格式 如图所示: 在使用try...catch捕获处理异常时需要注意: 1. 不要过度使用异常,不能使用异常处理机制来代替正常的..

XiaoAGiao16的博客 2601

java 编写异常_JAVA异常处理

原文链接作者:Jakob Jenkov译者:fangqiang08(fangqiang08@gmail.com)JAVA异常处理能够让你的程序更加方便、巧妙地处理错误。异常处理对于写出具有鲁棒性的JAVA程序、组件是非常重要的,但是这也经常被我们所忽视。当java程序中的一个错误发生时,经常导致一个异常被抛出。你怎么抛出、捕获、处理异常是重要的。有多种不同的方式来处理异常。但不是所有的方法都...

weixin_39796363的博客 180

Java中的异常处理是如何进行的?

在Java中自定义异常类是一个常见的编程实践,可以帮助开发者更好地管理和控制程序中的错误情况。以下是详细的步骤和方法:自定义异常类通常继承自Exception或其子类(如如果希望异常成为受检异常(checked exception),则需要继承自Exception;如果希望异常是编译期异常(unchecked exception),则可以继承自。创建一个新的类,并使其继承自Exception或其子类。例如,你可以创建一个名为// 构造函数这里我们通过扩展Exception类来创建自定义异常。

破损的天堂鸟博客 1170

java异常处理机制

文章目录java异常处理机制一、异常描述二、异常处理机制01、使用try...catch捕获异常02、异常类的继承体系03、Java7提供的多异常捕获04、访问异常信息05、使用finally回收资源06、异常处理的嵌套07、自动关闭资源的try语句三、Checked(检查)异常和Runtime(非受查)异常体系01、两者关系与区别02、使用throws声明抛出异常四、使用throw抛出异常01、...

qq_36649701的博客 873

Java----异常处理

异常(Exception)是程序在运行过程中发生的非正常事件,它会中断程序的正常执行流程。Java中的异常是Throwable类的子类实例,用于描述程序运行中出现的错误或异常情况。通常继承Exception(已检查异常)或RuntimeException(未检查异常)super("资金不足,缺少: " + amount);提供无参构造器提供带有详细描述信息的构造器提供带有详细描述信息和原因的构造器考虑实现序列化(实现Serializable接口)

2302_77697276的博客 820
上一篇: Java 7的并行支持:Fork/Join
下一篇: http状态查询 http 状态代码解释 http状态码查询
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值