finally里误用return

2024-06-02 00:32
文章标签 return finally 误用

本文主要是介绍finally里误用return,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天看到一句话,finally 语句块在 try 语句块中的 return 语句之前执行,过了两年突然对这句话感到有些困惑,以为是执行完try之后有finally就会最终再执行finally,没成想“finally 语句块在 try 语句块中的 return 语句之前执行”才是真理。


package test;public class TestFinallyReturn {public static void main(String[] args) {System.out.println(testFinally());}@SuppressWarnings("finally")private static int testFinally(){try {System.out.println("try");return 1;} catch (Exception e) {return -1;} finally{System.out.println("finally");return 0;}}}
执行结果如下:

try
finally
0

由上可知,finally 语句块在 try 语句块中的 return 语句之前执行,一定要注意:

只有资源需要释放的时候,才去使用finally,不要一股脑的扔到finally里面去处理,其他就扔给Java的垃圾回收机制处理吧,否则一不小心返回一个错误的结果就麻烦了。

这篇关于finally里误用return的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022533

相关文章

try -catch-finally的理解,同时在try-catch-finally中含有return和throws的理解

在没有try-catch或try-catch-finally的情况下,程序正常执行到某行,在这行报错后,这行后面的代码就不执行了,程序就停止了,中断了。 例如   在有try-catch或try-catch-finally 情况上,在某行执行错误,在try中这行下的代码不执行,try外的代码执行。当然是catch在没有做处理的情况下。如果catch中做了处理,在不影响当前程序下,try

王立平--AES加密图片实现 SkImageDecoder::Factory return null

这个问题是在加密图片,存入sd卡,在解密出来展示,出现的。我个人研究了很久没解决。最后经过高人指点,终于解决了。 在此,拿出来分享,希望各位少走弯路。 我之前的设计思路是:(可以不看哦) 1.把图片从drawable读入成bitmap 2.bitmap-->byte 3.调用AES的byte加密算法。 4.加密成byte,在转化为string 5,把string存入sd卡。

设计模式反模式UML图示常见误用案例分析

1. 过度复杂化图示 反模式: 在UML图示中加入过多的细节,导致难以理解。 案例分析: 案例背景: 某软件开发团队在为一个社交媒体平台设计架构时,决定使用观察者模式来处理用户之间的通知功能。在创建UML图示时,团队将所有可能的通知类型和相关的属性、方法都包含在内,导致图示非常复杂和混乱。整个团队在讨论设计时,发现很难从图示中快速理解系统的核心结构。 问题分析: 这种做法导致了UML图示过

Java中finally关键字的使用

与其他语言的模型相比,finally 关键字是对 Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。 如果没有 finally,您的代码就会很费解。例如,下面的代码说明,在不使用 finally 的情况下您必须如何编写代码来释放非内存资源: import java.net.*; impo

VS2013 + QT5.7.0静态编译 错误 .NMAKE:fatal error U1077. return code 0x2,使用 类 模板 需要 模板 参数列表

最近准备搞下QT,早有耳闻,QT的动态库机制让QT的程序大的无比,这我肯定是不能容忍的,准备使用静态库的方式,那就编译源码吧! 下面我说下环境以及碰到的问题 文章参考了http://blog.csdn.net/u011964923/article/details/52886908 ,但是我的报错了。。。下面是解决. 1.环境问题 1.QT版本 :qt5.7  qt-op

C++异常处理: try,catch,throw,finally的用法

写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你习惯使用异常了吗? 现在很多软件都是n*365*24小时运行,软件的健壮性至关重要.  内容导读本文包括2个大的异常实现概念:C++的标准异常和SEH异常. C++标

[置顶]C++异常处理:try,catch,throw,finally的用法

写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你习惯使用异常了吗? 现在很多软件都是n*365*24小时运行,软件的健壮性至关重要.  内容导读本文包括2个大的异常实现概念:C++的标准异常和SEH异常. C++标

【C++】win7 64下VC++6.0(Unable to register this add-in because its DLLRegisterServer return an error)

 FileTool.exe用于替换 Visual C++ 使用开发人员 Studio 对象模型中的打开和添加到项目菜单项。也是一个修复 VC6.0打开文件时出错退出的插件。 1. 下载FileTool.exe,并解压 2. 打开VC6.0,点击File-Open Workspace,选择刚解压出来的FileTool.dsw,并确定 3. 点击Bulid-Build FileTool.

try-catch-finally中finally的使用

1.finally时可选的 2.finally中声明的时一定会被执行的代码,即使catch中又出现异常了,try中有return语句,catch中有return语句的情况 3.像数据库连接,输入输出流,网络编程Socket等资源,JVM时不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。

c++ 解释return {it->second,i}; 这条语句中每个单词的含义

在 C++ 中,return {it->second, i}; 语句的含义可以分解为以下几个部分。 1. return 含义:return 是一个关键字,用于从一个函数中返回值。在函数执行到 return 语句时,会结束函数的执行,并将后面跟随的值返回给调用该函数的地方。 2. {it->second, i} 含义:这个部分使用了列表初始化(C++11 及以后版本引入的特性)。它表示创建一