当前位置: 首页 > article >正文

孤舟笔记 基础篇十五 finally 不是永远执行的吗?这些情况它真的不会执行

文章目录一、先说结论finally 几乎一定执行但不是绝对二、正常情况finally 确实很靠谱三、不执行的情况finally 也无力回天1. System.exit()——JVM 关机谁也拦不住2. 无限循环/死锁——永远到不了 finally3. 守护线程——JVM 退出时直接被抛弃4. kill -9——操作系统直接砍进程四、finally 的另一个坑return 覆盖五、回到全貌一图记住六、回答技巧与点评标准回答加分回答面试官点评个人网站面试官问你finally 语句块一定会执行吗你脱口而出一定面试官笑了“确定”你开始慌了。不是叫 finally 吗finally 不就是最终的意思吗最终执行那不是一定的吗还真不是。finally 有几种情况真的不会执行而且其中一些你可能在工作中已经踩过坑只是没意识到。一、先说结论finally 几乎一定执行但不是绝对情况finally 是否执行正常执行 try✅ 执行try 中抛异常✅ 执行try 中 return✅ 执行return 前先执行 finallytry 中有 returnfinally 也有 return✅ 执行但 finally 的 return 会覆盖 try 的System.exit()❌ 不执行JVM 直接关了无限循环/死锁❌ 不执行永远到不了 finally守护线程中 JVM 退出❌ 不执行线程被直接干掉强行杀进程kill -9❌ 不执行操作系统层面干掉了一句话记住finally 挡得住异常挡不住 JVM 关机。二、正常情况finally 确实很靠谱先看 finally 的基本盘——绝大多数情况下它确实会执行// 情况1正常执行try{System.out.println(try);}finally{System.out.println(finally);// ✅ 执行}// 情况2抛异常try{thrownewException(炸了);}finally{System.out.println(finally);// ✅ 执行}// 情况3try 里有 returntry{return;}finally{System.out.println(finally);// ✅ 执行return 之前先跑 finally}这三种情况覆盖了日常开发的 99%所以很多人形成了finally 一定执行的印象。但面试考的就是那 1%。三、不执行的情况finally 也无力回天1. System.exit()——JVM 关机谁也拦不住try{System.out.println(try);System.exit(0);// JVM 直接退出}finally{System.out.println(finally);// ❌ 不会执行}System.exit()是拔电源级别的操作——JVM 都关了还执行什么 finally就像你正要锁门出门结果房子塌了门还锁个啥。这也是为什么说 finally 挡不住 JVM 关机。System.exit(0)是正常退出System.exit(1)是异常退出不管哪个JVM 都直接走人。2. 无限循环/死锁——永远到不了 finallytry{while(true){// 死循环// 永远出不去}}finally{System.out.println(finally);// ❌ 永远执行不到}finally 的前提是 try 块结束不管是正常结束还是异常结束。如果 try 根本结束不了finally 自然没机会上场。就像排队等下班打卡但你永远在加班那下班卡永远打不上。3. 守护线程——JVM 退出时直接被抛弃ThreaddaemonnewThread(()-{try{System.out.println(守护线程try);}finally{System.out.println(守护线程finally);// ❌ 可能不执行}});daemon.setDaemon(true);// 设置为守护线程daemon.start();// 主线程结束后 JVM 退出守护线程的 finally 不会执行守护线程是给用户线程打辅助的。当所有用户线程结束JVM 就要退出守护线程会被直接干掉不管你 finally 里写了什么。所以千万别在守护线程的 finally 里做资源释放靠不住。4. kill -9——操作系统直接砍进程这个不用代码演示了。你在服务器上kill -9强杀 Java 进程操作系统直接回收内存JVM 连善后的机会都没有finally 自然不会执行。四、finally 的另一个坑return 覆盖finally 不止执不执行有坑怎么执行也有坑publicstaticinttest(){try{return1;}finally{return2;// finally 的 return 覆盖了 try 的 return}}// 返回 2不是 1千万不要在 finally 里写 return它不仅会覆盖 try 的返回值还会吞掉 try 里的异常publicstaticinttest(){try{thrownewRuntimeException(炸了);}finally{return2;// 异常被吞了调用方完全不知道出过错}}// 返回 2异常消失了调用方无感知finally 里的 return 就像开会时领导最后总结——不管你前面说了啥领导说的才是最终结论你的话全白说。五、回到全貌一图记住finally 执行情况 ├── ✅ 一定执行正常、异常、try 有 return └── ❌ 不执行 ├── System.exit() → JVM 关机 ├── 死循环/死锁 → 永远到不了 ├── 守护线程 JVM 退出 → 直接被抛弃 └── kill -9 → 操作系统强杀 finally 的坑 ├── finally 里的 return 会覆盖 try 的 return └── finally 里的 return 会吞掉 try 的异常 口诀finally 挡得住异常挡不住关机 finally 别写 return写了覆盖又吞异常。六、回答技巧与点评标准回答finally 语句块在绝大多数情况下会执行包括 try 正常结束、抛异常、甚至 try 中有 return 时都会在 return 之前执行 finally。但在以下情况不会执行调用了 System.exit() 导致 JVM 退出、try 中存在无限循环或死锁导致永远无法退出、守护线程中 JVM 退出时线程被直接终止、操作系统强杀进程。另外需要注意finally 中不要写 return 语句它会覆盖 try 的返回值并吞掉异常。加分回答提到 try-with-resourcesJava 7 引入的 try-with-resources 比 finally 关闭资源更安全因为它会保留原始异常不会被 finally 中的异常覆盖提到 finally 执行时机finally 在 try 的 return 之前执行但 return 的值在 finally 执行前就已经确定了除非 finally 修改了引用类型的字段提到实际建议资源释放优先用 try-with-resources别在 finally 里写 return守护线程的清理逻辑别放 finally面试官点评这道题是经典坑题考的是你对 JVM 运行机制的理解。finally 一定执行是大多数人脱口而出的答案但能说出 System.exit() 和守护线程两种不执行的情况就说明你比一般人深了一层。如果能再提到 finally 中 return 的坑和 try-with-resources 的最佳实践面试官会认为你不仅懂原理还知道怎么避坑这是加分项。原文阅读内容有帮助点赞、收藏、关注三连评论区等你

相关文章:

孤舟笔记 基础篇十五 finally 不是永远执行的吗?这些情况它真的不会执行

文章目录一、先说结论:finally 几乎一定执行,但不是绝对二、正常情况:finally 确实很靠谱三、不执行的情况:finally 也无力回天1. System.exit()——JVM 关机,谁也拦不住2. 无限循环/死锁——永远到不了 finally3. 守护…...

3大优势解析:gifuct-js——你的终极JavaScript GIF解码器解决方案

3大优势解析:gifuct-js——你的终极JavaScript GIF解码器解决方案 【免费下载链接】gifuct-js Fastest javascript .GIF decoder/parser 项目地址: https://gitcode.com/gh_mirrors/gi/gifuct-js 你是否在前端开发中遇到过GIF处理效率低下的问题?…...

Harness Engineering:Agent上下文清理机制

Harness Engineering 核心能力解密:Agent 上下文清理机制的原理、实现与生产级落地实践 副标题:彻底解决大模型Agent上下文溢出、幻觉、响应延迟三大痛点,让长会话Agent稳定性提升90% 第一部分:引言与基础 1.1 引言 做过生产级Agent开发的同学肯定都踩过类似的坑:你花了…...

智能看板系统:基于事件驱动的自动化项目管理实践

1. 项目概述:一个能“感受”任务状态的智能看板 如果你和我一样,在团队协作或者个人项目管理中重度依赖看板工具,那你一定遇到过这样的痛点:看板上的卡片越来越多,状态更新全靠手动拖拽,时间一长&#xff0…...

JVM性能调优:从定位问题到解决——线上CPU 100%怎么办?

上回说到并发锁,有个小伙伴问:”老师,生产环境CPU 100%,接口响应超时,该如何排查?”这让我想起了小王的一次线上事故——大促期间,服务CPU飙到100%,接口响应时间从500ms飙升到30s。今…...

阿里云社招一面:数据库中有 1000 万数据的时候怎么分页查询?

今天给大家分享一道阿里云社招面试中的经典问题——如何处理千万级数据的分页查询。这不仅是高频面试题,更是实际业务中必须解决的性能难题。下面我会从基础实现到阿里级优化方案,逐步拆解这个问题的技术要点。 1. 基础方案:LIMIT OFFSET的致…...

Windows系统优化终极指南:Chris Titus Tech WinUtil一键搞定所有系统管理

Windows系统优化终极指南:Chris Titus Tech WinUtil一键搞定所有系统管理 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil Windows…...

魔兽世界API开发终极指南:3分钟掌握wow_api完整使用技巧

魔兽世界API开发终极指南:3分钟掌握wow_api完整使用技巧 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api wow_api是一个专为《魔兽世界》开发者和玩家设计的开源工具集&a…...

【无人机三维路径规划】改进灰狼算法I-GWO多策略融合的无人机UAV路径规划【含Matlab源码 15377期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…...

解锁学术新秘籍:书匠策AI——期刊论文的“全能魔法师”

在学术的广袤天地里,期刊论文宛如璀璨星辰,照亮着知识探索的漫漫征途。对于莘莘学子、科研先锋以及学术追梦人而言,发表一篇高质量的期刊论文,不仅是展示自身才华与研究成果的绝佳舞台,更是推动学术进步、实现个人价值…...

解锁论文秘籍:书匠策AI——期刊论文创作的“智慧锦囊”

在学术的征途上,期刊论文是每一位研究者展示智慧结晶、推动学科进步的重要载体。然而,从选题构思到最终成稿,每一步都充满了挑战,让不少学者和学生倍感压力。别担心,今天我们就来揭秘一个强大的学术助手— 书匠策AI官网…...

揭秘书匠策AI:毕业论文写作的“全能魔法师”现身!

在学术的广阔天地里,毕业论文就像是一场盛大的探险,既充满挑战也蕴含无限可能。每一位踏上这场探险之旅的学子,都渴望拥有一位得力的向导,让前行的道路更加顺畅。今天,就让我带你走进书匠策AI的世界,这位毕…...

解锁学术新姿势:书匠策AI——期刊论文的“全能魔法师”

在学术探索的征途中,期刊论文是每位学者展示智慧火花的舞台,也是知识传承与创新的重要载体。然而,面对堆积如山的文献、错综复杂的逻辑结构,以及那令人头疼的格式要求,不少学者尤其是初学者常常感到力不从心。别怕&…...

银行金融机构专利数据2003-2023年

01、数据介绍金融机构作为申请主体,在科技创新过程中形成的具有新颖性、创造性和实用性的技术方案,并通过法定程序向国家专利局提出专利申请,经审查合格后被授予的专利权。金融机构的机构申请数量占比总银行数量不足5%,却贡献了76…...

3D打印Cherry MX键帽:从设计到制造的完整开源方案

3D打印Cherry MX键帽:从设计到制造的完整开源方案 【免费下载链接】cherry-mx-keycaps 3D models of Chery MX keycaps 项目地址: https://gitcode.com/gh_mirrors/ch/cherry-mx-keycaps 你是否曾经为找不到特殊尺寸的键帽而烦恼?或者想为自己的机…...

windows在使用ping 127.0.0.1时出现一般故障的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

AI开发安全隔离新范式(Docker Sandbox企业级配置全图谱)

更多请点击: https://intelliparadigm.com 第一章:AI开发安全隔离新范式(Docker Sandbox企业级配置全图谱) 在AI模型快速迭代与多团队协同开发场景下,传统共享环境极易引发依赖冲突、权限越界与训练数据泄露风险。Doc…...

VS Code MCP插件权限控制实战:5步构建SBOM+OPA双引擎合规防护体系

更多请点击: https://intelliparadigm.com 第一章:VS Code MCP插件权限控制实战:5步构建SBOMOPA双引擎合规防护体系 VS Code 的 MCP(Model Context Protocol)插件在 AI 原生开发中日益关键,但其对本地文件…...

终极指南:如何在电脑上流畅控制安卓手机的完整教程

终极指南:如何在电脑上流畅控制安卓手机的完整教程 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …...

XUnity.AutoTranslator:如何让外语游戏瞬间变成你的母语?

XUnity.AutoTranslator:如何让外语游戏瞬间变成你的母语? 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过精彩的游戏剧情?面对日语、英语…...

终极解放!MAA明日方舟助手如何让你每天节省3小时游戏时间?

终极解放!MAA明日方舟助手如何让你每天节省3小时游戏时间? 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地…...

Snap.Hutao开源原神工具箱:一站式解决Windows玩家的游戏管理痛点

Snap.Hutao开源原神工具箱:一站式解决Windows玩家的游戏管理痛点 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/s…...

终极指南:如何快速解码Adobe JSXBIN加密脚本

终极指南:如何快速解码Adobe JSXBIN加密脚本 【免费下载链接】jsxer A fast and accurate JSXBIN decompiler. 项目地址: https://gitcode.com/gh_mirrors/js/jsxer 在Adobe创意套件生态系统中,JSXBIN格式是保护ExtendScript脚本知识产权的常见方…...

Visual C++运行库一键修复终极指南:三步解决Windows系统依赖问题

Visual C运行库一键修复终极指南:三步解决Windows系统依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的困扰&#xff…...

学习自律养成系统小程序|基于java+小程序的学习自律养成小程序设计与实现(源码+数据库+文档)

学习自律养成小程序 目录 基于java小程序的学习自律养成小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&…...

PTA天梯赛L2真题保姆级复盘:L2-047锦标赛与L2-048寻宝图的DFS/二叉树实战避坑指南

PTA天梯赛L2级算法实战精要:从二叉树重构到矩阵DFS的竞赛思维突破 在算法竞赛的进阶之路上,PTA天梯赛L2级别的题目往往成为区分选手能力的关键分水岭。特别是涉及复杂数据结构与高效算法结合的题目,如完美二叉树重构和大规模矩阵DFS遍历&…...

终极iOS 15-16 iCloud绕过教程:applera1n工具完整使用指南

终极iOS 15-16 iCloud绕过教程:applera1n工具完整使用指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否遇到过iPhone或iPad因iCloud激活锁而无法使用的困境?当你恢复出…...

手把手教你配置RH850U2A的MPU:从寄存器操作到异常处理(附代码示例)

手把手教你配置RH850U2A的MPU:从寄存器操作到异常处理(附代码示例) 在嵌入式系统开发中,内存保护单元(MPU)是确保系统稳定性和安全性的关键组件。对于使用瑞萨RH850U2A系列MCU的开发者来说,正确配置MPU不仅能防止内存越…...

类加载器、双亲委派机制是干啥的?一文详解

目录 一.类加载器 1.作用:加载class文件 举例 2.过程详解 代码示例 3.类加载器的种类 ①启动类(根)加载器(Bootstrap ClassLoader,爷爷) ②扩展类加载器(Extension ClassLoader,爸爸) ③应用程序加载器(Appli…...

G-Helper:重新定义华硕笔记本硬件控制的轻量化解决方案

G-Helper:重新定义华硕笔记本硬件控制的轻量化解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, S…...