`
wandejun1012
  • 浏览: 2738562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

return不能放在finally里

    博客分类:
  • java
 
阅读更多

return语句如果放在finally里面,会使异常丢失。

 

 

见下面一个简单的例子:

 

 

package testThrowFinally;

public class TestThrowFinally {

	public static void main(String[] args) {
		try {
			System.out.println(new TestThrowFinally().start());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public String start() throws Exception{
		try {
			int a=4/0;
		}
		finally{
			return "hello";
		}
	}
}
 

 

 

如果你这样写的话,那么程序永远也不会抛出数学异常。

 

而且可以拿到hello这个串。

 

具体可以参见Think in java,缺憾:异常丢失。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java 中finally语句块与return的执行关系

    需要注意的是,在 finally 中改变 return 的值对返回值没有任何影响,这是因为 finally 中的代码是在 return 前执行的,而 return 语句是在 finally 中执行的。因此,对于基本类型的数据,在 finally 中改变 return ...

    try-finally-return-in-finally.rar_return

    3. `try-finally-return-in-finally.js` 直接对应我们的主题,即在`finally`块中使用`return`的情况。 在JavaScript中,当`try`块中的`return`语句执行时,控制流会立即跳到`finally`块,执行`finally`中的代码。...

    try-catch-finally-return-in-finally.rar_return

    `finally` 块总是会被执行,即使在 `try` 或 `catch` 中已经有一个 `return` 语句,这使得我们可以确保无论发生什么情况,都能执行必要的清理工作并返回一致的结果。 通过分析 `12.5-1.js` 和 `try-catch-finally-...

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

    3. 即使在`finally`块中也有`return`语句,`finally`块中的代码将被执行,然后返回值会被覆盖。这意味着`finally`块的`return`总是会覆盖`try`或`catch`块中的`return`。 现在让我们深入源码层面来进一步理解这个...

    try、catch、finally、return 执行顺序.doc

    通过以上分析,我们可以得出结论:任何执行 try 或者 catch 中的 return 语句之后,在返回之前,如果 finally 存在的话,都会先执行 finally 语句,如果 finally 中有 return 语句,那么程序就 return 了。...

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    浅谈Java中return和finally的问题

    尽管在 `finally` 里改变了 `i` 的值,但因为 `return` 在 `finally` 之后,所以返回的值仍然是 `try` 块中计算好的 `i` 的原始值(即 10)。 通过以上三个例子,我们可以得出以下结论: - `finally` 语句块总是会...

    Java中finally和return的关系实例解析

    4. 在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。 Java中finally和return的关系实例解析是一个非常重要的知识点,掌握它可以帮助开发者写出高质量的Java代码。

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    关于Java中的try-catch-finally语句和return

     第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四:  1、return语句只在函数后出现一次。  2、return语句仅在try和catch里面都出现。  3、...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    Java的throw和return

    在这个例子中,如果传入的年龄小于0,则会抛出一个`Exception`对象,并附带错误消息“年龄不能为负数”。 #### return关键字 `return`关键字用于从方法中返回一个值或结果。它不仅可以用来结束方法的执行,还可以...

    finally结构的注意点(一)

    5. **异常传递**:如果 `finally` 块不包含 `return` 语句,那么它不会影响已经抛出的异常。异常会在 `finally` 执行完毕后继续向上层传播。 6. **静态块与实例初始化块**:`finally` 块与类的静态初始化块和实例...

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    从结果可以看到,finally 块中的 return 语句会覆盖 try 块中的 return 语句,try 块中的 return 语句就不能返回了。 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 finally 块中的 ...

    浅析Python中return和finally共同挖的坑

    本文主要给大家介绍了在Python中return和finally共同存在的坑,以及填坑经验,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 初识 return 相信每一个用过Python函数的童鞋, 肯定会用过return...

    try-catch-finally捕获异常

    2. 程序输出结果:提示:除数不能为 0 3. 程序输出结果:the result is 3 八、实验总结 本实验的主要目的是使用try-catch-finally语句捕获和处理异常。在myDevide()方法中,我们使用try-catch-finally语句捕获和...

    谈谈Java中try-catch-finally中的return语句

    在这种情况下,`return`后面不应该有任何表达式,只允许`return;`的形式。 现在,我们来看看`try-catch-finally`结构中的`return`语句。`try`块通常包含可能会抛出异常的代码,`catch`块捕获并处理这些异常,而`...

    Java异常处理中同时有finally和return语句的执行问题

    在涉及finally和return语句时,Java有一些特定的行为规则。 首先,`finally`块中的代码总是会被执行,除非程序在执行到`finally`块之前就退出了JVM(例如通过`System.exit()`)。即使在`try`块或`catch`块中有`...

    使用try-catch-finally处理异常

    即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...

Global site tag (gtag.js) - Google Analytics