首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从try catch finally块中返回是不好的做法吗?

try-catch-finally块中返回是不推荐的做法,因为这可能导致代码逻辑混乱和不易维护。

try块中,我们通常会执行可能抛出异常的代码。如果发生异常,catch块会捕获并处理异常。finally块则会在trycatch块之后执行,通常用于释放资源或执行清理操作。

try块中直接返回可能导致finally块中的代码没有执行。这可能会导致资源泄漏或数据不一致等问题。同样,在catch块中直接返回也可能导致finally块中的代码没有执行。

为了避免这种情况,建议在trycatchfinally块之外定义一个变量,用于存储返回值。在trycatch块中修改这个变量的值,然后在finally块中执行返回操作。这样可以确保finally块中的代码始终会执行。

例如:

代码语言:java
复制
String result;
try {
    // 执行可能抛出异常的代码
    result = "success";
} catch (Exception e) {
    // 处理异常
    result = "error";
} finally {
    // 释放资源或执行清理操作
    // ...
    return result;
}

总之,从try-catch-finally块中返回是不推荐的做法,应该在块之外定义变量来存储返回值,并在finally块中执行返回操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你真的理解 Java try_catch_finally

调用 test() 结果: try catch finally return in finally 例子 4 有异常,catch return 会导致提前返回 public static String...return 2;   } } 返回值:2 说明:与我们上面的例子一致,finally return 导致提前返回try return1 不会被执行。...不知你是否想起一点:Java 按值传递finally i 只是一个局部变量,finally 执行完毕后,局部变量便不复存在。...loop.");       }   } finally {       ;   } } 小结 为了方便说明,只举了 finally 代码例子,catch 代码类似的。...总结 执行顺序:   1. try 代码 return 前面的部分   2. catch 代码 return 前面的部分   3. finally 代码 return 前面的部分   4.

64880

写了挺久代码,却还被异常支配?

catch 会使异常达不到应有的目的 如果我们一定要选择忽略异常,那么明确做法应该是:在 catch 包含一条注释,说明为什么可以这样做,并且将变量名称命名为 ignored 派生异常 ?...在 finally 内部,无论 try 代码哪里返回,都会被执行,何以见得呢? ? 那么问题又来了!...还是返回 finally 结果,答案已经揭晓,那么我们来总结一下: 1、不管有没有出现异常,finally中代码都会执行 2、当trycatch中有return时,finally仍然会执行 3、...finallytryreturn后面的表达式运算后执行(此时并没有返回运算后值,而是先把要返回值保存起来,管finally代码怎么样,返回值都不会改变,仍然之前保存值),所以函数返回在...finally执行前确定 4、finally中最好不要包含return,否则程序会提前退出,返回值不是trycatch中保存返回值 异常使用指南 上面我们复习了一遍Java 异常,下面一段来自

55310

JAVA异常处理实战心得

6.finally不要改变返回finally子句可选项,可以有也可以没有。但是每个try语句至少需要一个catch或者finally子句。...如果try里面有个return语句,try finally{} 里 code 会在方法返回调用者前被执行。 什么意思呢?总结起来一句话:在finally改变返回做法不好。...因为如果存在finally代码tryreturn语句不会立马返回调用者,而是记录下返回值待finally代码执行完毕之后再向调用者返回其值,然后如果在finally修改了返回值,就会返回修改后值...,tryreturn语句依然会返回进入finally之前保留值。...2)如果return数据引用数据类型,而在finally对该引用数据类型属性值改变起作用,tryreturn语句返回就是在finally改变后该属性值。

50220

Java异常处理和设计

当然catch可以有多个,注意try只能有一个,finally可选(但是最多只能有一个finally)。 三个执行顺序为 : try—>catch—>finally。...在使用try..catch..finally时候,注意千万不要在finally中使用return,因为finallyreturn会覆盖已有的返回值。...从这个例子说明,无论try或者catch是否包含return语句,都会执行finally。 如果将这个程序稍微修改一下,将finallyreturn语句注释去掉,运行结果: ?...最后打印出"finally",返回值被重新覆盖了。 因此如果方法有返回值,切忌不要再finally中使用return,这样会使得程序结构变得混乱。...把底层原始异常直接传给用户一种不负责任表现,通常做法:程序先捕获原始异常,然后抛出一个新业务异常,新业务异常包含了对用户提示信息,这种处理方式呗称为异常转译。

96410

Java关键字 Finally执行与break, continue, return等关键字关系

那好,即使与 finally 相对应 try 语句得到执行情况下,finally 语句一定会执行吗?不好意思,这次可能又让大家失望了,答案仍然是否定。请看下面这个例子(清单 2)。...如果 try 语句异常结束,应该先去相应 catch 做异常处理,然后执行 finally 语句。同样问题,如果 catch 语句包含控制转移语句呢?...从上面的清单 3 和清单 4,我们可以看出,其实 finally 语句try 或者 catch return 语句之前执行。...6 执行结果: return value of getValue(): 1 利用我们上面分析得出结论:finally 语句try 或者 catch return 语句之前执行。...通过以上分析,大家应该已经清楚 try-catch-finally 语句执行流程了吧! 为了更具说服力,我们还是来引经据典吧!大家可以不相信我,难道还不相信“高司令”(Gosling)

3.5K60

这道面试题,出错率90%

不管try模块代码是否异常,也不管哪一个catch被执行,甚至try或者catch模块执行了return语句,finally模块总会被执行。...trycatchfinally三者组合关系为: ? 在前面已经提到了,不管try里是否有异常,不管try或者catch是否有return语句,finally代码会执行。...第二步:将“小泽”放入操作栈,然后将操作数栈数据保存到本地变量1。 ? 第三步:将本地变量2放入操作数栈,将操作数栈数据返回。 ? 所以上面的面试题,最终返回苍老师。...输出日志可以看出,异常时在finally模块后执行。 例外 如果我们在try模块代码中有下面这行代码,finally模块就不会执行了。...希望大家不管在工作还是面试都能轻松应对。 没有学不好技术,只有不爱学习的人~

34720

Java finally 用法,看这一篇就够了

2.什么finally try 关键字最后可以定义 finally 代码finally 定义代码,总是在 try 和任何 catch 之后、方法完成之前运行。...Inside finally 3.4 try 代码返回值 即使 try 代码返回,也不能阻止 finally 代码执行。...Inside try Inside finally 3.5 在 catch 代码返回catch 代码添加返回语句,finally 代码依然会执行。...常见陷阱 我们在使用 finally 关键字时会遇到很多陷阱。 有一些不好编码方式,如在 finally 代码存在返回值或者扔出异常。...5.2 覆盖其他返回语句 如果 finally 代码存在返回语句,则 trycatch 代码如果存在返回语句就会被忽略。

1.4K31

【148期】最最最全面的Java异常面试及解答

finally一般作用在try-catch代码,在处理异常时候,通常我们将一定要执行代码方法finally代码,表示不管是否出现异常,该代码都会执行,一般用来存放一些关闭资源代码。...注意:在 finally 改变返回做法不好,因为如果存在 finally 代码try return 语句不会立马返回调用者,而是记录下返回值待 finally 代码执行完毕之后再向调用者返回其值...1.1 使用 finally 代码 与前面几行 try 代码不同,finally 代码总是会被执行。不管 try 代码成功执行之后还是你在 catch 代码处理完异常后都会执行。...合理做法至少要记录异常信息。...说明:tryreturn语句执行成功后,并不马上返回,而是继续执行finally语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

55420

Java异常处理和设计

以下本文目录大纲: 一.什么异常 二.Java如何处理异常 三.深刻理解try,catch,finally,throws,throw五个关键字 四.在类继承时候,方法覆盖时如何进行异常抛出声明...当然catch可以有多个,注意try只能有一个,finally可选(但是最多只能有一个finally)。 三个执行顺序为try—>catch—>finally。...在使用try..catch..finally时候,注意千万不要在finally中使用return,因为finallyreturn会覆盖已有的返回值。下面看一个例子: ?...可以看出,在try中发生FileNotFoundException之后,就跳到第一个catch,打印"file not found"信息,并将"step2"赋值给返回值,然后执行finally,最后将返回返回...从这个例子说明,无论try或者catch是否包含return语句,都会执行finally。 如果将这个程序稍微修改一下,将finallyreturn语句注释去掉,运行结果: ?

59130

Java异常处理和设计

当然catch可以有多个,注意try只能有一个,finally可选(但是最多只能有一个finally)。   三个执行顺序为try—>catch—>finally。   ...在使用try..catch..finally时候,注意千万不要在finally中使用return,因为finallyreturn会覆盖已有的返回值。...:   可以看出,在try中发生FileNotFoundException之后,就跳到第一个catch,打印"file not found"信息,并将"step2"赋值给返回值,然后执行finally...从这个例子说明,无论try或者catch是否包含return语句,都会执行finally。   ...如果将这个程序稍微修改一下,将finallyreturn语句注释去掉,运行结果:   最后打印出"finally",返回值被重新覆盖了。

73730

看完这篇 final、finally 和 finalize 和面试官扯皮就没问题了

finally 保证程序一定被执行 finally 保证程序一定执行机制,同样它也是 Java 一个关键字,一般来讲,finally 一般不会单独使用,它一般和 try 一起使用,例如下面一段...深入理解 finally 我们上面大致聊到了 finally 使用,其作用就是保证在 try 代码执行完成之后,必然会执行 finally 语句。不管 try 是否抛出异常。...finally 必须和 try 或者 try catch 一起使用。...当 finally返回值时,会直接返回。不会再去返回 try 或者 catch 返回值。...finalize 真的没用 我们上面简单介绍了一下 finalize 方法,并说明了它是一种不好实践。那么 finalize 调用时机是什么?为什么说 finalize 没用呢?

31030

Java异常面试题(2020最新版)

finally一般作用在try-catch代码,在处理异常时候,通常我们将一定要执行代码方法finally代码,表示不管是否出现异常,该代码都会执行,一般用来存放一些关闭资源代码。...注意:在 finally 改变返回做法不好,因为如果存在 finally 代码try return 语句不会立马返回调用者,而是记录下返回值待 finally 代码执行完毕之后再向调用者返回其值...1.1 使用 finally 代码  与前面几行 try 代码不同,finally 代码总是会被执行。不管 try 代码成功执行之后还是你在 catch 代码处理完异常后都会执行。...合理做法至少要记录异常信息。 ...说明:tryreturn语句执行成功后,并不马上返回,而是继续执行finally语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

74930

Java异常最常见八大问题

1.异常管理最佳做法 如果可以正确处理异常,则应该被捕获,否则应该抛出异常。 2.为什么try定义变量不能用于catchfinally? 原因你不知道在try哪里会抛出异常。...IllegalArgumentException ArrayIndexOutOfBoundsException 当条件不满足时,它们可用于if语句中 5.我们可以在同一个catch子句中捕获多个异常?...答案肯定。只要这些异常类可以追溯到类继承层次结构同一个超类,就可以只使用该超类。 6.构造函数可以在java引发异常? 答案肯定。构造函数一种特殊方法。这是一个代码示例。...} 但为了获得更好代码可读性,您应该将嵌入式try-catch作为新方法进行包装,然后将方法调用放在finally子句中。...try { ...} catch(Exception e) { e.printStackTrace();} 忽略很容易。频繁出现并不意味着正确。

37820

【Java ——异常机制详解】

处理,finally语句语句还是会被执行,但finally语句语句不会被执行;当try捕获到异常,catch语句里有处理此异常情况:在try语句按照顺序来执行,当执行到某一条语句出现异常时...,程序将跳到catch语句,并与catch语句逐一匹配,找到与之对应处理程序,其他catch语句将不会被执行,而try语句,出现异常之后语句也不会被执行,catch语句执行完后,执行finally...所以,创建、抛出和捕获异常开销很昂贵。把代码放在try-catch返回阻止了JVM实现本来可能要执行某些特定优化。...合理做法至少要记录异常信息。...tryreturn语句执行成功后,并不马上返回,而是继续执行finally语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

6100

Java基础教程(10)-Java异常处理机制

也就不需要我们显⽰进⾏处理。关键字Java异常处理通过5个关键字控制:trycatch、throw、throws和 finally。程序声明了你想要异常监控包含在一个try。...任何被引发方法异常都必须通过throws子句定义。 任何在方法返回前绝对被执行代码被放置在finally。...finally { // block of code to be executed before try block ends }在Java,凡是可能抛出异常语句,都可以用 trycatch...{ }其他业务类型异常就可以 BaseException 派生;抛出异常时,尽量复用JDK已定义异常类型;finally 和 return 执行顺序如果 try 中有 return 语句, 那么...因为 return 表⽰要整个⽅法体返回, 所以,finally 语句会在 return 之前执⾏。

12210

Java finally 语句到底在 return 之前还是之后执行?

1 finally语句在return语句执行之后return返回之前执行 2 finallyreturn语句会覆盖tryreturn返回 3 如果finally语句中没有return语句覆盖返回值...,那么原来返回值可能因为finally修改而改变也可能不变 4 tryreturn语句在异常情况下不会被执行,这样具体返回哪个看情况 5 当发生异常后,catchreturn执行情况与未发生异常时...这里大家可能又要想:是不是每次返回一定是tryreturn语句呢?那么finallyreturn b不是一点作用没?请看下面。...当然只有在异常情况下才有可能会执行,那么finally之前就返回?看下面。...6 最后总结 finally语句在trycatchreturn语句执行之后返回之前执行且finally修改语句可能影响也可能不影响trycatch return已经确定返回值,若finally

1.2K10

Java异常处理最佳实践

finally 清理资源或者使用 try-with-resource 语句 1.1 使用 finally 代码 1.2 Java 7 try-with-resource 语法 2....1.1 使用 finally 代码 与前面几行 try 代码不同,finally 代码总是会被执行。不管 try 代码成功执行之后还是你在 catch 代码处理完异常后都会执行。...合理做法至少要记录异常信息。...【强制】有try放到了事务代码catch异常后,如果需要回滚事务,一定要注意手动回滚事务。 【强制】finally必须对资源对象、流对象进行关闭,有异常也要做try-catch。...说明:tryreturn语句执行成功后,并不马上返回,而是继续执行finally语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try返回点。

70850

处理Java异常10个最佳实践

永远不要在catch吞掉异常 catch (NoSuchMethodException e) { return null; } 永远不要不处理异常,而是返回null,这样异常就会被吞掉...永远不要在finally抛出异常 try { someMethod(); //抛出 exceptionOne } finally { cleanUp(); //如果在这里再抛出一个异常...,那么tryexceptionOne将会丢失forever } 在上面的例子,如果someMethod()抛出一个异常,并且在finally,cleanUp()也抛出一个异常,那么初始exceptionOne...如果您不打算处理异常,请使用finally而不是catch try { someMethod(); } finally { cleanUp(); } 这也是一个很好实践。...如果在你方法访问其他方法,而该方法抛出了异常你不想处理,但是仍然需要做一些清理工作,那么在finally中进行清理。不要使用catch

1.3K10

Java finally语句到底在return之前还是之后执行?

网上有很多人探讨Java异常捕获机制try...catch...finallyfinally语句是不是一定会被执行?...2. finallyreturn语句会覆盖tryreturn返回。...这里大家可能又要想:是不是每次返回一定是tryreturn语句呢?那么finallyreturn b不是一点作用没?请看下面。...finally,执行完了catch返回finally里对b改变对返回值无影响,原因同前面一样,也就是说情况与tryreturn语句执行完全一样。...最后总结:finally语句在trycatchreturn语句执行之后返回之前执行且finally修改语句不能影响trycatchreturn已经确定返回值,若finally里也有return

1.3K20

Java finally语句到底在return之前还是之后执行?

作者:Alexia cnblogs.com/lanxuezaipiao/p/3440471.html 网上有很多人探讨Java异常捕获机制trycatchfinallyfinally语句是不是一定会被执行...2. finallyreturn语句会覆盖tryreturn返回。...这里大家可能又要想:是不是每次返回一定是tryreturn语句呢?那么finallyreturn b不是一点作用没?请看下面。...当然只有在异常情况下才有可能会执行,那么finally之前就返回?看下面。 5. 当发生异常后,catchreturn执行情况与未发生异常时tryreturn执行情况完全一样。...最后总结 finally语句在trycatchreturn语句执行之后返回之前执行且finally修改语句可能影响也可能不影响trycatch return已经确定返回值,若finally

77520
领券