JAVA中try-catch异常逃逸

【WRF数据准备】生成 LCZ 对应的FRC_URB2D WRF 静态地理数据准备 阅读详情

    有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。

    1) 如果catch中,再次抛出exception,那么原try中的exception是否还能抛出呢?

    2) 如果catch中,抛出异常,finally是否继续执行?

    3) 如果finally抛出异常,那么catch中抛出的异常,还能被外部捕获到吗?

    4) 如果catch中,再次抛出异常,那么在finally中使用“return”,外部还能捕获异常吗?

 

    中断方法调用的手段有“异常中断”和“return返回”,那么我们可以简单的认为throw异常也是导致方法调用终止的信号,它和return的作用是一样的。

 

   答案1),其实这么说可能不妥,既然catch了,原异常就没有意义了。但是如果没有catch代码块,try中的异常仍会被抛出。

 

    答案2),finaly无论如何,总会执行,即使在try-catch中使用了“return”;但是,如果在catch和finaly中,都使用了“return”,那么最终是哪个return值时有意义的?

public static int test2() {
        try{
            System.out.println("try");
            throw  new RuntimeException("try");
        } catch (Exception e) {
            System.out.println("catch");
            return 1;
        } finally {
            System.out.println("finally");
            return 2;
        }
}

  如上述代码,那么最终返回的是“1”还是“2”?答案是2。

 

    答案3),因为java中“exception栈”只能保存最后一条,因此最后抛出的异常将会替换原来的异常,因此如果finally中抛出异常,那么catch中的再次抛出的异常将被“擦除”(逃逸)。

 

    答案4),“return”和“exception”都被认为是“方法中断”操作,最后发生者将会生效;当catch中再次抛出异常,原目的是将此异常抛给调用者,结果在finally中使用return(我们认为此处使用return是不当的),那么异常将会被擦除,“return”正常返回。为了避免这种问题,我们可以这么做:

Throwable ex = null;
try{
	System.out.println("try");
	throw  new RuntimeException("try");
} catch (Exception e) {
	ex = e;
} finally {
	System.out.println("finally");
	if(ex != null) {
		throw new RuntimeException(ex);
	}
	return 2;
}

 

 

 

LinePhone3.2.7(android端最新版本) sip客户端 SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/ 立即下载

相关推荐

QTest 单元测试框架及单元测试思考

qt 单元测试框架 QTEST 及思考

一个老菜鸟的学习分享 1万+

不能抛出异常,只能try-catch的几种情况

在Java编程中,某些情况下不能通过方法签名直接抛出检查型异常,而是需要在方法内部使用try-catch块来捕获和处理异常。这些情况主要包括重写父类方法、实现接口方法、lambda表达式和函数式接口、构造方法、静态初始化块等。这些限制通常是由于Java语言的设计规则和接口规范要求,目的是确保方法签名的一致性和异常处理的健壮性。

m0_73180708的博客 1022

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1124

异常处理---Throwable

Throwable是类,Exception和Error都继承了该类 所以在捕捉的时候,也可以使用Throwable进行捕捉 如图: 异常分Error和Exception Exception里又分运行时异常和可查异常。 public class TestException { public static void main(String[] args) { File f=new File("d:/l.txt"); try { System.o

追梦的女孩博客 910

【图像检测】基于MATLAB的火灾监测系统设计

1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题,提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法.火焰颜色特征是基于RGB颜色模型中的R,G,B三基色分量和它们之间的关系来判断是否有火焰发生,烟雾模型特征是图像灰度化预处理后,基于HIS空间模型提取的,通过计算像素点与基准像素点之间距离D的大小来判断是否有火灾发生.对提出的算法进行MATLAB仿真,并和传统的基于五种算子的边缘检测算法提取火焰烟雾特征进行对比.实验结果表明,提出的火焰特征和烟雾特征提取算

qq_59747472的博客 2797

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

如何捕获java线程中的逃逸的异常

由于Java线程的本质特征,当抛出异常的时候就终止了如果再进行catch,都不在一个线程里面,所以无法捕捉到异常。Java线程中,要在run()方法中把一切的异常都处理掉,可以使用try-catch块。不能让这个线程抛出异常,因为如果我们不使用特殊的方式的话,我们是无法捕获从这个线程中逃逸的异常的。异常一旦抛出了,那么这个线程就会停止运行,但是不会影响主线程和其它的线程。因为主线程和其它的线程都不知

惜暮 5222

OpenClaw 2026 路线图详解:3 大协作能力升级与社区贡献增长 62% 的实证分析

介绍 OpenClaw 2026 如何通过上下文锚定(Context Anchoring)、协作质量定义和责任边界机制,将 AI 编程工具从单点补全升级为嵌入代码生命周期的协作对齐系统,并详解 `.openclaw/config.yaml` 中 `context_anchor` 配置的实操方法与效果

weixin_42545292的博客 383

类反射newInstance创造对象的异常逃逸事件

项目场景: jdk8真的要退出历史舞台了,就如曾经的6一样,必须得退了。作为java技术人,要拥抱新时代。 springBoot3.0已经明确说了,不支持1.8,而且在今年11月就要出SpringBoot3的正式版了。 早上又看到kafka3也说了弃用对 Java 8 和 Scala 2.12 的支持。 你真的还坚持不拥抱17? 问题描述: 反射newInstance对象不能catch到异常,try是提示补偿的catch哦,不信咱们试试。 package jdk; import java.lang.r

zwrlj527的专栏 1369

零件边界线提取处理原理详解

该程序提出了一种高效的点云边界提取方法,通过三阶段处理流程实现零件几何特征的精确提取。首先采用RANSAC算法进行坐标系标准化,包括主平面检测、点云分割和双重旋转对齐。接着使用凹包算法和RANSAC直线拟合提取底面边界。最后通过多方向密度切片分析(Z向100片、X向50片),自动选择高密度切片进行边界提取和直线拟合。算法具有鲁棒性强、处理效率高(支持OpenMP并行计算)和参数可配置等特点,能有效提取零件的几何边界特征,为后续质量检测提供基础。实验结果显示该方法能准确提取零件的多方向边界线。

weixin_45196569的博客 433

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

java catch中抛出异常_JAVA中try-catch异常逃逸

有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。1) 如果catch中,再次抛出exception,那么原try中的exception是否还能抛出呢?2) 如果catch中,抛出异常,fin...

weixin_35834213的博客 4470

MuJoCo 入门教程(一)

在 MuJoCo 仿真中输入自定义数字有三种方法。首先,可在 XML 中定义全局数字字段。它们有一个名称和一个实数值数组。其次,可以通过特定元素的自定义数组来扩展某些模型元素的定义。具体方法是在 XML 元素大小中设置 nuser_XXX 属性。第三,数组 mjData.userdata 不用于任何 MuJoCo 计算。用户可以在这里存储自定义计算的结果;请记住,所有随时间变化的内容都应存储在 mjData 中,而不是 mjModel 中。自定义文本字段可以保存在模型中。

机器人控制与仿真应用 1万+

Java 线程中的未捕获异常处理

由于线程的本质特性,使得不能捕获从线程中逃逸的异常。一旦异常逃逸出任务的 run() 方法,它就会向外传播到控制台,除非采取特殊的步骤捕获这种错误的异常。 下面的任务总是会抛出一个异常: public class Main{ public static void main(String[] args) { ExecutorService exec = Executors.newCa...

“罐装面包”的博客 1760

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jre9下载 jdk9

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

Java使用异常控制流_Java异常控制机制和异常处理原则

原标题:Java异常控制机制和异常处理原则Java异常控制机制又被称为“违例控制机制”。捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行。但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解决。错误在运行期间发生时,我们可能不知道具体应该怎样解决,但我们清楚此时不能不管不顾地继续执行下去。此时应该做的事情是:暂停程序的运行指出何时、何地发生了什么样的错误可能的话应处理...

weixin_34062155的博客 405

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVA基础(三)

1.对象都在堆里吗? 不,由于TLAB和逃逸技术的发展,或者在jvm开启在栈上分配时某些特殊的对象可以存放在栈上 2.什么对象可以作为根节点? 虚拟机栈中引用的对象 方法区中静态属性引用的对象 方法区中常量引用的对象 本地方法栈中JNI引用的对象 3.异常try-catch-finally中,try和finally中都有return,怎么返回? 结论: 1、不管有木有出现异常,fin...

qq_36647176的博客 156

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【转载】Java异常控制机制和异常处理原则

转载自Java异常控制机制和异常处理原则 Java异常控制机制又被称为“违例控制机制”。 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行。但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解决。 错误在运行期间发生时,我们可能不知道具体应该怎样解决,但我们清楚此时不能不管不顾地继续执行下去。此时应该做的事情是: 暂停程序的运行 指出何时、何地发...

weixin_33860528的博客 157

正确捕捉异常Exception和正确的日志打印(转)

原文地址:https://blog.youkuaiyun.com/weixin_41988875/article/details/102879349 Java异常控制机制又被称为“违例控制机制”。 *非常感谢原作者!感觉对异常处理思路变的无比清晰!感谢!!!* 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行。但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解决。 错误在运...

weixin_43252916的博客 1441

C++异常处理:从try-catch到RAII的健壮代码实践

在软件开发中,错误处理是确保程序健壮性的核心机制。C++通过异常处理机制提供了一种结构化的错误管理方式,其基本原理是通过try、throw、catch实现错误检测与处理的解耦。这一机制的技术价值在于能够实现资源的自动清理和程序状态的可靠恢复,避免因未处理错误导致的程序崩溃或资源泄漏。在工程实践中,异常处理常应用于文件操作、网络通信、动态内存管理等容易出现不可预测错误的场景。要编写异常安全的代码,必须理解栈展开过程和RAII(资源获取即初始化)设计模式,这是实现资源自动管理的关键。本文深入探讨了C++异常处理

weixin_34007020的博客 311

JAVA:异常

异常处理就像城市交通管理,需要预防、处理和善后的完整体系。记住:好的异常处理能让程序像经验丰富的老司机,即使遇到突发状况也能优雅应对。当你在代码中看到异常时,不要惊慌,它正是程序在向你发送求救信号。掌握这些技巧,你将成为代码世界的超级交警!希望大家在Java世界通行的时候能记住今天小楊教给大家的交通规则,大家也可以分享一下遇到的交通事故哦!

Y20051106的博客 835

5 分钟掌握 Java核心之四:异常处理三原则

问题 在开始本文之前,尝试回答如下问题 NoClassDefFoundError 和 ClassNotFoundException 有什么区别 什么是 checked exception 怎么看? 什么异常不应该捕获?什么时候抛出异常( throw),什么时候声明抛出异常( throws),什么时候捕获之后重新抛出? try with resurce、try catch finally,mult...

wenxueliu的博客 2499

关于Android中多线程中异常捕获出现的问题和解决办法

最近有个同学问我这样一段代码,代码如下: 第一段代码是这样的,try catch是将整个线程都放在try代码块中。 第二块代码是将线程里面的run方法代码块进行try catch。 大家可能第一反应都是觉得只是try的代码块不一样,范围不一样了而已。但是可曾想过就是这个try的地方不一样导致了不同的结果。第一种try方式当里面的run()方法执行时报了异常是捕获不到的

人生若只如初见 7738

try-catch

有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。 1) 如果catch中,再次抛出exception,那么原try中的exception是...

weixin_33797791的博客 78

【转载】try-catch

本文转载自http://shift-alt-ctrl.iteye.com/blog/2156937   有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。     1) 如果catch中

武汉红喜 412
上一篇: ServiceLoader加载基于配置的类服务
下一篇: guava cache与编程实践
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值