try catch finally执行顺序
try catch finally,try里有return,finally还执行么?
答案: 执行,并且返回return时,finally的执行早于try。
try-catch-finally的执行顺序
无return
当try中的t()没有抛出异常
public static void main(String[] args) {try{System.out.println("try");}catch (Exception e) {System.out.println("catch");}finally {System.out.println("finally");}System.out.println("other");}
执行结果:
try
finally
otherProcess finished with exit code 0因为没有捕捉到异常,那么执行try而不会执行catch,而finally无论如何都要执行。
其执行顺序为:try--catch--other
当try中有异常时
/*** @author gf* @date 2023/2/17*/
public class TryCatchFinally {public static void main(String[] args) {try{System.out.println("try");int i = 1 / 0;}catch (Exception e) {System.out.println("catch");}finally {System.out.println("finally");}}
}运行结果:
try
catch
finally
otherProcess finished with exit code 0当 try中抛出异常,那么抛出异常的语句之后的代码, 程序会尝试捕捉异常。捕捉Exception,捕捉成功,执行 catch;一旦捕捉到一个异常,不会再尝试捕捉其他异常,直接执行finally里的代码;最后再执行后面的其他代码。
其执行顺序是:try--catch--finally--other
有return
try块中有return
public static void main(String[] args) {System.out.println(test());}public static String test() {try {return "return--try";} catch (Exception e) {System.out.println("catch");} finally {System.out.println("finally");}return "other";}
执行结果:
finally
return--tryProcess finished with exit code 0程序执行try块中return之前(包括return语句中的表达式运算)代码;再执行finally块,最后执行try中return;finally块之后的语句return不再执行,因为程序在try中已经return过了。
其执行顺序是:finally--return(try)
catch块中有return
public static void main(String[] args) {System.out.println(test());}public static String test() {try {int i=10/0;} catch (Exception e) {return "return--catch";} finally {System.out.println("finally");}return "other";}执行结果:
finally
return--catchProcess finished with exit code 0有异常:执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return。 finally之后的return不再执行。
无异常:执行完try再finally再return。
try块和finally块中有return
public static void main(String[] args) {System.out.println(test());}public static String test() {try {return "try";} catch (Exception e) {
// return "return--catch";System.out.println("return--catch");} finally {return "finally";}}指向结果;
finallyProcess finished with exit code 0无异常:程序执行try块中return之前(包括return语句中的表达式运算)代码;再执行finally块,因为finally块中有return所以提前退出,而不再执行try中的return;
有异常:不执行try,顺序执行catch-finally
结论:得到finally中的返回值finally。
catch块和finally块中有return
public static void main(String[] args) {System.out.println(test());}public static String test() {try {// try中有异常 catch和finally中有returnint i=10/0;} catch (Exception e) {return "return--catch";} finally {return "finally";}}执行结果:
finallyProcess finished with exit code 0无异常:执行try后跳过catch执行finally;得到finally的返回值finally;
有异常:程序执行catch块中return之前(包括return语句中的表达式运算)代码;再执行finally块,因为finally块中有return所以提前退出。而不再执行catch中的return。
结论:得到finally中的返回值finally。
try块、catch块和finally块中有return
public static void main(String[] args) {System.out.println(test());}public static String test() {try {int i=10/0;return "try";} catch (Exception e) {return "return--catch";} finally {return "finally";}}执行结果:
finallyProcess finished with exit code 0总结
无return,无异常:try ->finally
无return,有异常:catch ->finally
try或catch中有return,无异常:try -> finally ->return(try)
try或catch中有return,有异常:try(未出现异常的前半段) -> catch ->finally->return(catch)
不论有没有异常,try或catch中有没有return:try/catch->return(finally)
相关文章:
try catch finally执行顺序
try catch finally,try里有return,finally还执行么?答案: 执行,并且返回return时,finally的执行早于try。try-catch-finally的执行顺序无return当try中的t()没有抛出异常public static void main(String[] …...
2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程
2023年数学建模美赛D题分析建模与编程 重要说明: 本文介绍2023年美赛题目,并进行简单分析;本文首先对 D题进行深入分析,其它题目分析详见专题讨论;本文及专题分析将在 2月17日每3小时更新一次,完全免费&am…...
35岁测试工程师被辞退,给你们一个忠告
一:前言:人生的十字路口静坐反思 入软件测试这一行至今已经10年多,承蒙领导们的照顾与重用,同事的支持与信任,我的职业发展算是相对较好,从入行到各类测试技术岗位,再到测试总监,再转…...
华为OD机试题 - 租车骑绿岛(JavaScript)
最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...
Linux下Python脚本的编写解析fio(minimal格式)(三)
在服务器测试(storage)过程中,会看到很多人写跑fio的脚本用minimal格式来解析,因为这种格式返回的结果对与脚本(shell,python)解析log非常方便.下面介绍一下这种方式下,用Python来解析log 1 一般客户会要求结果中出现一下参数的值: bandwidth…...
【实战场景二】如何设计一个分布式锁?
如何优雅的设计一个分布式锁?如何设计一个分布式锁?1、什么是分布式锁2、那么分布式锁,具备什么条件呢?3、设计分布式锁有哪些方式?3.1 利用redis实现分布式锁原理3.2 基于数据库做分布式锁3.3 基于zookeeper实现分布式…...
Java中ThreadLocal类详解
ThreadLocal从名字上我们看出,它叫做本地线程变量,每个线程都有各自的的变量,而不再是我们之前的两个线程共用同一个变量;以这个类创建的变量,在多个线程都用到这个变量时,可以为每一个线程创建一个变量副本…...
从一致性角度考虑推荐冷启动长尾推荐问题(一)
前言:目前中长尾推荐的方法有很多,主流的方法有几类比如:1)在没有项目ID嵌入的情况下提高推荐模型的鲁棒性,2)利用有限的交互数据提高学习效率,如使用元学习方法;3)利用物品侧面信息,便于物品ID嵌入的初始化࿰…...
电脑(Windows)常用快捷键
简述:实用的键盘快捷键是一个程序员的必备技能,下面给大家整理了一下常用的键盘快捷键; ⭐CtrlP 打开“打印机”对话框; ⭐CtrlW 关闭当前网页; ⭐CtrlF 查找(网页内查找); ⭐…...
Java类加载器
1 类加载器 1.1 类加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为…...
信号完整性设计规则之单根信号失真最小化
本文内容从《信号完整性与电源完整性分析》整理而来,加入了自己的理解,如有错误,欢迎批评指正。 1. 通常采用所能容许的最长上升边。 上升边越短,带宽越大,信号完整性问题越严重。 2. 使用可控阻抗走线。 可控阻抗…...
Python3 数据结构
列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 以下是 Python 中列表的方法: 方法 描述 list.append(x) 把一个元素添加到列表的结尾…...
Compose-Navigation带参传递
带参传递 目前 compose 还不支持传入对象作为参数! 简单双参数 根目录下新建文件夹 entity,新建单例类 ContentType 作为数据类存储位置 新增数据类 DemoContent,这表示我们需要传入的两个参数,后面带问号判空 object ContentT…...
【函数栈帧的创建和销毁】 -- 神仙级别底层原理,你学会了吗?
文章目录1.函数的调用方式 2.函数在栈区上的动作 1.函数的调用方式 相信你对调用函数一点都不陌生,但是在调用函数的过程中,却存在着很多你无法见到的东西,这是底层信息,想要理解透彻,就得深入底层去观察。 本文以…...
Promise的使用及原理
此文章主要讲解核心思想和基本用法,想要了解更多细节全面的使用方式,请阅读官方API 这篇文章假定你具备最基本的异步编程知识,例如知道什么是回调,知道什么是链式调用,同时具备最基本的单词量,例如page、us…...
怎么拥有一个帅气的 CMD 命令窗口 ❓ - Windows
自从拥有这样一个炫酷的命令窗口,我都舍不得关掉它了 关于我为什么我要闲的去 “打扮” 一个命令窗口,这要从星期五下午的一场 摸鱼 🐠 开始,当时我要创建一个 vue ts vite 的项目练练手,为新项目开始做准备&#x…...
时隔多年再学习Vuex,什么?原来如此简单!
时隔多年再学习Vuex,什么?原来如此简单! start 写 Vue 写了好多年了,少不了和 Vuex 打交道。虽然使用它的次数非常频繁,但是潜意识里总觉得这东西很难,导致遇到与之相关的问题就容易慌张。时至今日,升级版…...
Linux笔记_gcc
Linux_gcc程序的翻译链接库make与makefile关于gcc的一些笔记。 程序的翻译 gcc/g是一个编译器。 预处理:头文件展开、条件编译、宏替换、去注释 编译:C语言汇编语言 汇编:汇编->可重定位目标二进制文件,不可以被执行࿰…...
2023美赛MCM A题 详细思路
2023美赛(MCM/ICM)如期开赛,为了尽早的帮大家确定选题。这里我们加急为大家编辑出A赛题详细思路,方便大家快速对A题目的难度有个大致的了解。同时,我们也给出了A题目简要的解题思路,以及该问题在实际解决中可能会遇到的难点。A题的…...
c#: NetTopologySuite凹凸多边形计算
环境: .net 6.0NetTopologySuite 2.5.0vs2022平面二维 一、夹角计算 1.1 计算向量与x轴正方向的夹角 方法: AngleUtility.Angle(Coordinate p) 下图上的t2即为p,之所以这么写是为了和AngleUtility.AngleBetweenOriented做比较 注意: 结果…...
GPSGms6模块嵌入式集成指南:多系统GNSS驱动与低功耗定位实战
1. GPSGms6 模块技术解析:面向嵌入式系统的 GMS-6 全功能 GPS 接收器驱动与集成指南GPSGms6 是一款基于国产 GMS-6(GNSS Multi-System 6)芯片的紧凑型 GPS 模块,广泛应用于车载终端、智能穿戴、无人机定位、农业机械导航及工业物联…...
Pixel Dimension Fissioner实操手册:裂变结果AB测试与转化率验证方法
Pixel Dimension Fissioner实操手册:裂变结果AB测试与转化率验证方法 1. 工具概览与核心价值 Pixel Dimension Fissioner(像素语言维度裂变器)是一款基于MT5-Zero-Shot-Augment引擎的文本增强工具,它将传统AI文本处理转变为充满…...
coze-loop真实案例:优化前后代码对比,效果惊艳!
coze-loop真实案例:优化前后代码对比,效果惊艳! 1. 从低效到优雅:一段Python代码的蜕变之旅 最近在开发一个数据处理脚本时,我遇到了性能瓶颈。原始代码虽然功能正确,但处理10万条数据需要近30分钟。抱着…...
春促买了游戏当晚玩不上?教你一招回家0等待!
🛒Steam春促杀疯了!但我差点被“下载焦虑”气哭一大早摸鱼刷手机,Steam春季促销的红点弹出来,点进去一看,卧槽!心愿单里那几款蹲了半年的3A大作,居然打骨折了!赶紧在工位偷偷摸摸用手…...
Qwen3-4B Instruct-2507保姆级教程:Linux/Windows双平台部署
Qwen3-4B Instruct-2507保姆级教程:Linux/Windows双平台部署 1. 学习目标与前置准备 大家好,今天我们来聊聊怎么在Linux和Windows系统上,快速部署一个属于你自己的、能流畅对话的AI助手。这个助手基于阿里通义千问的Qwen3-4B-Instruct-2507…...
MedGemma多模态系统展示:支持‘请用住院医师水平’‘请用主任医师水平’分级输出
MedGemma多模态系统展示:支持‘请用住院医师水平’‘请用主任医师水平’分级输出 1. 系统核心能力概览 MedGemma Medical Vision Lab 是一个基于 Google MedGemma-1.5-4B 多模态大模型构建的医学影像智能分析 Web 系统。这个系统最独特的地方在于,它能…...
Nomic-Embed-Text-V2-MoE模型Windows部署全流程:从系统重装到服务上线
Nomic-Embed-Text-V2-MoE模型Windows部署全流程:从系统重装到服务上线 如果你是一名Windows开发者,想在自己的电脑上跑起最新的Nomic-Embed-Text-V2-MoE模型,但被各种环境问题搞得头大,那这篇文章就是为你准备的。 我见过太多朋…...
编码学习课后感
编码学习课后感通过编码学习课程,我深刻认识到编码是连接人类语言与计算机世界的桥梁,是信息传递的核心基础。课程从ASCII、Unicode等字符编码讲起,让我明白计算机无法直接识别文字,必须通过编码规则将字符转换为二进制数据。早期…...
ssm+java2026年毕设失踪儿童信息平台【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于失踪儿童问题的研究,现有研究主要以法律法规完善、打击拐卖犯罪、DNA数据库建设等宏观层面为主,专…...
极客玩法:OpenClaw+GLM-4.7-Flash控制智能家居
极客玩法:OpenClawGLM-4.7-Flash控制智能家居 1. 为什么选择这个组合? 去年装修新房时,我给自己定了个小目标:用最轻量的技术方案实现全屋智能控制。试过HomeAssistant原生语音模块和各类商业方案后,最终选择了OpenC…...
