今年上自习看<<深入java虚拟机>>,有提到虚拟机里有种基本类型:returnAddress,用于实现finally子句.
由此想起以前有看过finally与return执行先后次序的讨论.
小编程序试试...加深印象.
/*
@author: jarg
http://jarg.iteye.com/
*/
public class Test
{
public static void main(String[] args)
{
System.out.println(test());
}
public static String test()
{
try
{
int i = 2/0;
System.out.println("error1.");
return "1";
}
catch (Exception e)
{
System.out.println("error2.");
return getValue();
}
finally
{
System.out.println("error3.");
}
//System.out.println("error4.");
}
public static String getValue()
{
System.out.println("getValue()");
return "2";
}
}
结果输出:
error2.
getValue()
error3.
2
解释:
catch子句中的return子句,会先计算并处理返回值,再判断是否有finally子句.
有则执行finally子句再执行方法返回的操作;否则直接方法返回.
分享到:
相关推荐
3. 即使在`finally`块中也有`return`语句,`finally`块中的代码将被执行,然后返回值会被覆盖。这意味着`finally`块的`return`总是会覆盖`try`或`catch`块中的`return`。 现在让我们深入源码层面来进一步理解这个...
如果 finally 中有 return 语句,那么程序就 return 了,这是因为 finally 语句是在 return 语句执行之后、返回之前执行的。 try、catch、finally、return 执行顺序的规则是:try 语句用于包装可能抛出异常的代码,...
Java语言finally语句详解,finally到底是在return之前还是之后执行.zip
在下面的示例中,我们可以看到 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 ```java public class FinallyTest1 { public static void main(String[] args) { System.out.println...
这意味着,如果在 `finally` 块中有 `return`,那么这个 `return` 将覆盖之前 `try` 或 `catch` 中的 `return`,成为函数的最终返回值。 例如,在JavaScript中,以下示例展示了 `try-catch-finally-return-in-...
这意味着,如果在try块中执行了return语句,finally语句将在return语句执行之前执行。如果finally语句中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,...
Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。
30. **try-finally**:try后的return不会阻止finally块执行,finally在return之前执行。 31. **DataGrid.DataSource**:它可以连接各种数据源,如DataTable、DataSet、List或其他实现了IEnumarable的对象。 32. **...
34. try后的finally会执行,无论是否有return,finally在return之前执行。 35. 两个对象值相同但hashCode不同是可能的,比如两个字符串内容相同但引用不同。 36. 参数传递是值传递,但对象的属性是可变的,所以...
可以看到,finally语句块在try语句块中的return语句之前执行。 finally语句块的执行顺序是非常重要的,需要我们认真地了解和掌握。只有在try语句块得到执行的情况下,finally语句块才会执行,而不是一定会执行的。
## 二.finally finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时... finally到底是在return之前执行还是return之后执行?
即使在`try`块或`catch`块中有`return`语句,`finally`块内的代码也会在返回之前被执行。这是为了确保资源的清理或其他重要的操作能够完成。 第一种情况中,`try`块包含了`return`语句,`finally`块不包含`return`...
2. **`return` 与 `finally` 的执行顺序**:在 `try` 块中遇到 `return` 时,会先执行 `finally` 语句块,然后再返回值。这是因为 `finally` 中的代码优先级高于 `return`,即使 `return` 已经被触发,`finally` ...
例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,根据《深入Java虚拟机》一书的描述,`finally`块的实现是通过`jsr`...
1. **异常抛出前执行**:如果在`try`块或`catch`块中抛出了异常,并且这个异常没有被捕获或者被重新抛出,那么在抛出异常之前,系统会先执行`finally`块中的代码。这意味着即使程序因为异常而提前终止,`finally`块...
如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值将是`finally`块中的`return`值。这是因为`finally`块的执行优先级高于`return`语句,它确保了资源的...
`打印0,因为在`finally`块之前,`res`的值被重置为0。 6. `return res + 3;`返回5。 7. `main`方法中,`b`被赋值为5,打印"main b= 5"。 **异常执行情况**: 1. 如果`e.b`未被初始化,`e.a / e.b;`会抛出`...
但是,由于 `finally` 块的存在,程序在真正返回之前会先执行 `finally` 块中的代码,即 `print('finally')`。 这意味着即使函数即将返回,`finally` 块中的代码仍然会被执行。这对于那些期望函数返回后立即退出的...
在清单1的示例中,由于`i = i / 0`导致了`ArithmeticException`,程序在进入`try`块之前就抛出了异常,因此`finally`块没有执行。同样,如果移除`return`语句的注释,程序在`try`块内返回,`finally`块依然不会执行...
- 即使`return`语句在`try`或`catch`块中出现,`finally`块的代码也会在返回之前执行。但要注意,`finally`块中的`return`语句会覆盖掉`try`或`catch`中的`return`结果。 3. 示例代码: ```java try { // 可能...