首页 > 其他分享 >在try中加return还会执行finally么

在try中加return还会执行finally么

时间:2025-01-13 15:01:43浏览次数:3  
标签:return try finally 返回值 执行 Java

在日志中很清晰的表现了,先执行try的日志,再执行finally内的日志,最后打印try中return的返回值

为什么return没有拦截finally呢?

try 块中的返回操作: return 指令会将返回值准备好。 但是返回值并不会立刻返回,而是先将当前栈帧(包含 try 代码块中计算的返回值)保存。

执行 finally 块: JVM 会确保在返回值被提交给调用者之前执行 finally 块。 这是因为 finally 块在字节码层面有更高的执行优先级,JVM 会在方法返回前处理 finally 代码块的内容。

return 指令: 最终,return 指令会将返回值返回给调用者。

总结:Java 在执行 try 块中的 return 时,并不会立即返回值,而是会先执行 finally 块。原因在于 Java 的字节码执行模型和异常处理机制保证了 finally 块的执行优先级高于返回值的提交。这是由 JVM 的控制流设计来确保 finally 中的资源释放等清理工作总是被执行。

如果try和finally都有return呢?

没有try的return的打印!

为什么 try 中的 return 没有返回值?

在 Java 中,如果 try 块中执行了 return,方法并不会立刻返回结果,而是会先进入 finally 块并执行其中的代码。如果 finally 块中有 return,它会覆盖 try 块中的 return 值,导致最终返回的是 finally 中的值。 这是 Java 中的一个特性:finally 中的 return 语句会“抢占” try 中的返回值,导致 try 中的 return 被忽略。

标签:return,try,finally,返回值,执行,Java
From: https://blog.csdn.net/qq_54114915/article/details/145109425

相关文章

  • Tkinter-Entry单行输入组件
    Entry在GUI界面下,有时需要输入一些内容供我们接受,例如在一个登录界面,我们可能需要接受用户输入的账号、密码以及验证码等信息,这个时候可以考虑使用Entry单行输入组件。Entry组件的常用属性Entry输入的值需要使用变量进行接受,Tkinter里面有以下四种:StringVar(),BooleanVa......
  • In‐band Network Telemetry
    #卫星#遥测技术#INT一、INT是什么?INT,In‐bandNetworkTelemetry,带内网络遥监测。telemetry,英文原意是遥测技术。从其英文名称可以了解如下:a.In-band,说明监测指令及数据均在带内传输b.telemetry,说明是长距离,远程获取网络数据的方法。想象一下卫星在天上飞,地面遥测监控的......
  • 使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务
    使用GitHubActions构建CosyVoice项目的运行环境镜像并推送到阿里云容器镜像服务和GitHubPackageRegistry概述本文介绍了如何使用GitHubActions构建CosyVoice项目的运行环境Docker镜像,并将其推送到阿里云容器镜像服务(ACR)和GitHubPackageRegistry。通过挂载本地......
  • 【Java编程】一个高性能、支持百万级多任务重试框架:Fast-Retry
    前言假设你的系统里有100万个用户,然后你要轮询重试的获取每个用户的身份信息,如果你还在使用SpringRetry和GuavaRetry之类的这种单任务的同步重试框架,那你可能到猴年马月也处理不完,即使加再多的机器和线程也是杯水车薪,而Fast-Retry正是为这种场景而生。Fast-Retry一个高性能......
  • vue3项目yarn install遇到的info There appears to be trouble with your network con
    新接手的vue3项目在安装依赖的时候经常下载失败,报错Couldn'tfindpackage...onthe"npm"registry或者errorError:readECONNRESET1.可以改变当前的源查看当前使用的源yarnconfiggetregistry改变源yarnconfigsetregistryhttps://registry.npmmirror.com(推荐......
  • Fast-Retry:一个支持百万级多任务异步重试框架
    前言假设你的系统里有100万个用户,然后你要轮询重试的获取每个用户的身份信息,如果你还在使用SpringRetry和GuavaRetry之类的这种单任务的同步重试框架,那你可能到猴年马月也处理不完,即使加再多的机器和线程也是杯水车薪,而Fast-Retry正是为这种场景而生。Fast-Retry一个高性......
  • return View()
    在ASP.NETMVC中,returnView()是一个常见的语句,用于从控制器返回一个视图。这个语句告诉MVC框架需要渲染一个视图,并将其发送到客户端(通常是浏览器)。以下是关于returnView()的一些详细信息和使用场景:基本用法返回默认视图:当你调用 returnView() 而不传递任何参数时,MV......
  • 在 Windows 中,配置单元文件(Registry Hive)是 Windows 操作系统注册表的核心组成部分。W
    在Windows中,配置单元文件(RegistryHive)是Windows操作系统注册表的核心组成部分。Windows注册表是一个存储系统配置和应用程序设置的数据库,而配置单元(Hive)是这些数据库的一个逻辑分区。每个Hive存储一组与系统或用户相关的数据,结构上可以视为一个分区或区域。什么是配置单......
  • SpringBoot进阶教程(八十四)spring-retry
    在日常的一些场景中,很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring-retry。spring-retry可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释......
  • Javascript中的return你了解多少?
     目录1、 js中对于return用法的三种情况的总结如下:2、return的特点......