finally在try和catch块以及return中的执行顺序

100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结 一、Selenium框架环境搭建 1. 下载模块 2. 安装浏览器驱动WebDriver 二、基础操作 1. 打开浏览器 2. 无界面模式 3. 元素定位 4. 元素操作 5. 前进后退 6. 执行js 7.页面等待 隐式等待(常用) 显式等待(了解) 三、进阶操作 1. 使用代理ip 2. 修改请求头 3. 隐藏指纹特征..................... 阅读详情

执行顺序

无catch时

  • finally会在try包含的return之后执行,会在try外面的return之前执行

当有catch时

  • finally是在catch执行之后catch包含的return之前执行的

执行顺序图

try包含的return
|
v
catch
|
v
finally
|
v
catch包含的return
|
v
try外面的return(和catch块不能并存)

DEMO验证

package abc;

/** 
 * @ClassName: Test1 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author  bamboo   <a href="mailto:zjcjava@163.com?subject=hello,bamboo&body=Dear Bamboo:%0d%0a描述你的问题:">Bamboo</a>
 * @date 2017年3月2日 下午2:49:55 
 * @since
 */

public class Test1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        testa();
    }


    public static  Object testa() {
        // TODO Auto-generated method stub
         StringBuffer sb = new StringBuffer("");

            try {
                return print(sb);
            } finally {
                sb.append("finally");
                System.out.println(sb.toString());
            }
    }

    public static  Object testb() {
        // TODO Auto-generated method stub
         StringBuffer sb = new StringBuffer("");

            try {

            } finally {
                sb.append("finally");
                System.out.println(sb.toString());
            }
            return print(sb);
    }

    public static  Object testc() {
        // TODO Auto-generated method stub
         StringBuffer sb = new StringBuffer("");

            try {

                int a=1;
                if(1==a){
                    throw new Exception();
                }
                return print(sb);
            }catch(Exception e){
                sb.append("catch");
                return print(sb);
            }finally {
                sb.append("finally");
                System.out.println(sb.toString());
            }
    }
    public static  Object print(StringBuffer sb) {
        // TODO Auto-generated method stub
            sb.append("return");
          System.out.println(sb.toString());

          return null;
    }
}

testa()方法ouput:

return
returnfinally

testa()方法是return在try的里面,从结果看先执行的retrun然后执行的finally;

testb()方法ouput:

finally
finallyreturn

testb()方法是return在try的外面,从结果看先执行的finally然后执行的retrun;

testc()方法ouput:

catchreturn
catchreturnfinally

testb()方法是return在try的外面,从结果看先执行的finally然后执行的retrun;

参考资料

http://www.ibm.com/developerworks/cn/java/j-lo-finally/
finally对基本类型和引用类型参数造成的影响
http://blog.youkuaiyun.com/imzoer/article/details/8037970

鸿蒙应用发布实战:应用热更新的实现 在移动应用开发领域,应用更新是持续交付价值的关键环节。传统的应用更新方式需要用户手动下载完整安装包,不仅用户体验差,而且更新率往往不理想。热更新技术(也称为OTA更新)允许应用在不重新安装的情况下动态更新部分功能,极大提升了用户体验和迭代效率。本文专注于鸿蒙操作系统下的应用热更新实现方案,涵盖从原理到实践的完整知识体系。鸿蒙热更新的技术架构差分更新算法实现动态部署机制实际项目中的最佳实践安全与性能优化策略首先介绍鸿蒙热更新的背景和核心概念深入分析技术原理和算法实现。 阅读详情

相关推荐

OASIS协议标准文档的解读_第一部分

OASIS标准协议的文档的解读。完整原协议的中文翻译和解读。

洋葱的专栏 4899

finally在return之后也会执行吗

是的,finally块中的代码会在return语句之后执行。在 Java 中,语句块确保finally块总是被执行,无论try块内部发生了什么情况——无论是正常结束、遇到return语句还是抛出异常。这种行为使得finally块成为执行清理工作的理想位置,例如关闭文件、释放资源或其他必须执行的清理操作。

m0_57236802的博客 2550

SoC验证新思路:除了UVM仿真,你还可以试试Cadence JasperGold的形式化验证

本文深入探讨了Cadence JasperGold形式化验证在SoC设计中的创新应用,对比传统UVM仿真验证,详细解析了其数学穷尽性验证优势。通过实战案例展示了JasperGold在总线协议、时钟域交叉等关键场景的验证方法,并提供了混合验证流程设计与效能优化方案,帮助工程师提升验证效率30%以上。

weixin_30566063的博客 119

有return的时候,finally块中代码还会执行吗

1 背景 当然是面试被问到了。。。。 2 记录一下 这篇文章主要讲解两个问题: 在try中有return或者catch中有return的时候,finally中的代码是否会执行? 如果会被执行,是在什么时候执行的呢? 先看第一个问题,我们也准备了一点代码。 static void Main(string[] args) { Foo(50); Foo(200); } static int Foo(int a) { tr

目标:MVP 4382

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

基于深度学习的道路裂缝检测系统完整教程

本文介绍了一种基于深度学习的道路裂缝检测系统完整解决方案。项目采用5466张高质量道路裂缝图像数据集,包含YOLO和Pascal VOC两种标注格式,覆盖多种道路场景。系统利用CNN和YOLO算法实现高效检测,相比传统人工巡检显著提升效率和准确性。文中详细阐述了数据集结构、环境配置和训练流程,包括数据预处理、智能分割策略和质量检查方法。该技术可及时发现道路裂缝隐患,降低维护成本,保障交通安全,为道路养护提供智能化解决方案。

FJN110的博客 296

Java:try里有return,finally还执行吗?

try catch finally 是Java中为了防止出现错误导致功能无法使的常见用法。当 try 部分的代码出错,就会去执行 catch 部分的代码。同时往往还会做一个总结性的操作即 finally 中的代码。但是有一个容易出错的问题:当 try 里有 return 语句,finally 部分的代码还会执行吗?先说结论:当 try 里有 return 语句,finally 部分的代码还会执行,并且 finally 的执行早于 try 里面的 return。

qq_46119575的博客 2114

QT+QGIS跨平台编译(基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译)

QT+QGIS跨平台编译。 基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译。

LuckyHanMo的博客 4372

Task1 Python基础入门:变量与异常处理(第三天)

Task1 Python基础入门:变量与异常处理(第3天) 一般异常处理: try: 执行 except A as e: # 异常错误 执行 存在finally的异常: try: 执行 except: #条件执行 执行 … finally: #必须执行 执行 存在else的异常: try: 执行 except: 执行 else: #执行try的内容时,else执行,否则不执行 执行

jshmxwc的博客 713

【软考】系统集成项目管理工程师(一)信息化知识

软考中级——系统集成项目管理工程师备考干货第一章:信息化知识。

商务合作 | 共同学习 | 携手共进 9万+

使用CNN/ResNet实现自动调制识别(RML2018.01a)

本文基于RML2018.01a大型数据集,给出CNN及其变体ResNet的信号识别的实现方式(附代码) 目录一、CNN的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 构建CNN模型1.4 模型训练1.5 测试及模型可视化二、ResNet的代码实现 RML2018.01a数据集信息如下: 数据集来源 Over-the-Air Deep Learning Based Radio Signal Classification 调制类型 19种数字调制方式: 32PSK, 16APSK,

QAQIknow的博客 1万+

try里有return,finally还执行么?

3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的 值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数 返回值是在finally执行前确定的;4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。2、当try和catch中有return时,finally仍然会执行;执行,并且finally的执行早于try里面的return。

m0_56020102的博客 3339

恒玄BES调试笔记-BES2500如何打开COMPEXP

打开Compressor and expander会占用资源,这个根据个人项目需求而定吧!打开方法,以及参数修改如下: config\best2300a_ibrt_anc\target.mk SPEECH_RX_COMPEXP ?= 1 apps\audioplayers\bt_sco_chain_cfg_default.c #if defined(SPEECH_RX_COMPEXP) /*****************************************************

leezs的博客 705

我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序

大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用。 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭资源。一个try块后面可以跟多个catch块,如果后面一个catch块也不跟,就一定要跟一个finally 块。 结论1:当在try块遇到return语句时,finally语句块将在方法返回...

young码农的博客 494

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

面试题:try-catch-finally块中存在return语句,解释其执行顺序

java基础—try、catch、finally代码块中存在return语句的执行顺序 public class TryTest{ public static void main(String[] args){ System.out.println(test1()); System.out.println("---------"); System.out.println(test2()); System.out.println("-

zitian246的博客 1006

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

面试题:try-catch块中存在return语句,是否还执行finally块 ,如果执行,说出执行顺序 try-catch- finally块中, finally块唯一不执行的情况是什么?

结论: 1、不管有没有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; 4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。 举例:情况1:try{}

ltcz99的博客 1514

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

try-catch-finally的执行顺序

try-catch-finally的执行顺序 结论: 不管有没有出现异常,finally代码块都会执行; 不管try和catch的代码块中有return时,finally仍会执行,且如果finally代码块也有return,则此代码肯定会返回finally执行的return值。 分有return和没有return来讨论try-catch-finally执行顺序的情况: 1 无return 举个例子: try { t(); tt(); } catch (Exception e) {

qq_43842093的博客 1万+

java中的try catch finally块中return的执行顺序(基础)

一、背景 1.当我们的程序出现异常的时候,我们可以选择捕获异常,我们可以选择try catch来处理我们出现异常的代码逻辑,这时候还有一个知识点就是finally何时执行,接下来我们用简单的例子来说明下吧! 二、没有发生异常的时候 1.代码 public static void main(String[] args) { int i = method1(); ...

码农小默 606

try中的return和finally中的return

我们都知道在try-catch-finally中,try块先执行,如果捕获到异常,则执行catch块,如果没有捕获到异常,那么catch块始终不执行,在catch块执行完之后,finally块最后执行。 则那么问题来了(假设都没有捕获异常) 1,如果try块中有return语句,那么finally会执行吗? 答案:会(实践在后面) 2,如果finally块中改变了try块中的return语句要返回...

weixin_42033925的博客 4707

Java Exception 异常机制(2) -- try-catch-finally 块中 return 语句执行顺序

Java Exception 异常机制 – try-catch-finally 块中 return 语句执行顺序 @ 本文转载自 https://blog.youkuaiyun.com/z69183787/article/details/61922302y 作者很详细的的介绍了各种return在try-catch-finally语句中执行顺序 我怀着感恩的心,不要脸的在自己博中随喜人别人的成...

null 773

Java中try、catch、finally的用法

Java中try,catch,finally的用法,以前感觉还算熟悉,但看到一篇博文才有更深点的理解,总结网友博客如下。 Java异常处理的组合方式: 1.try+catch  运行流程:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句  2.try+catch+finally  运行流程:运行到try块中,如果有异常抛出,则转到

Aguangg_6655_la的博客 9558

Java中try,catch,finally执行顺序

Java中try,catch,finally代码执行顺序是怎么样的?如果带有return又是怎样的?这是面试常考的一个问题。 先给出结论: 1.如果try中没有异常,则顺序为try→finally;如果try中有异常,顺序为try→catch→finally,并且异常之后的代码不会执行。 2.当try或catch中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。 还要注意,如果return的

Humphrey0313 4663

Java异常----try、catch和finally块中的return执行顺序

1.当Java程序执行try块、catch块时遇到return语句,return语句会导致该方法立即结束。系统执行完return语句之后,并不会立即结束该方法,而是去寻找该异常处理流程中是否包含finally块,若没有finally块,则方法终止,返回相应的返回值;若有finally块,则立即开始执行finally块,此时若finally块中没有return语句,则系统才会再...

weixin_33725272的博客 134

Java try catch finally的执行顺序

在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行? 第一种情况:try中包含return语句,finally中不包含. public class Hello{ public static void main(String[] args) { Hello h1=new Hello(); System.out

koches的专栏 2928

try catch finally 里面有return的执行顺序详细讲解

try catch finally 里面有return的执行顺序 实例测试 第一种情况 try里面有return,catch和finally里面吗没有return public static int tryTest(int i){ try { System.out.println("try里面的语句执行了!"); return i; }catch (Exception e){ e.printStack

qq_46589658的博客 5400

try-catch-finally执行顺序验证

try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try-catch-finally的return在编译阶段做的优化,参考.class文件可以知道return的是哪个值。 总结: 对于return x,无论x是基本类型还是引用类型。 如果finally块内有return,则采用finally块中return时的x值; 如果finally块内没有...

追梦者xuaner 849
上一篇: java异常信息丢失之异常链
下一篇: java三大特性之多态
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值