`
yeshaoting
  • 浏览: 684374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

finally在return之前执行

    博客分类:
  • J2SE
阅读更多

 

今年上自习看<<深入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子句再执行方法返回的操作;否则直接方法返回.

 

 

分享到:
评论

相关推荐

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

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

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

    如果 finally 中有 return 语句,那么程序就 return 了,这是因为 finally 语句是在 return 语句执行之后、返回之前执行的。 try、catch、finally、return 执行顺序的规则是:try 语句用于包装可能抛出异常的代码,...

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

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

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

    在下面的示例中,我们可以看到 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 ```java public class FinallyTest1 { public static void main(String[] args) { System.out.println...

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

    这意味着,如果在 `finally` 块中有 `return`,那么这个 `return` 将覆盖之前 `try` 或 `catch` 中的 `return`,成为函数的最终返回值。 例如,在JavaScript中,以下示例展示了 `try-catch-finally-return-in-...

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

    这意味着,如果在try块中执行了return语句,finally语句将在return语句执行之前执行。如果finally语句中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,...

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

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

    .net 面试题.pdf

    30. **try-finally**:try后的return不会阻止finally块执行,finally在return之前执行。 31. **DataGrid.DataSource**:它可以连接各种数据源,如DataTable、DataSet、List或其他实现了IEnumarable的对象。 32. **...

    Java面试题目定义.pdf

    34. try后的finally会执行,无论是否有return,finally在return之前执行。 35. 两个对象值相同但hashCode不同是可能的,比如两个字符串内容相同但引用不同。 36. 参数传递是值传递,但对象的属性是可变的,所以...

    关于Java中try finally return语句的执行顺序浅析

    可以看到,finally语句块在try语句块中的return语句之前执行。 finally语句块的执行顺序是非常重要的,需要我们认真地了解和掌握。只有在try语句块得到执行的情况下,finally语句块才会执行,而不是一定会执行的。

    java大厂面经、直击BAT

    ## 二.finally finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时... finally到底是在return之前执行还是return之后执行?

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

    即使在`try`块或`catch`块中有`return`语句,`finally`块内的代码也会在返回之前被执行。这是为了确保资源的清理或其他重要的操作能够完成。 第一种情况中,`try`块包含了`return`语句,`finally`块不包含`return`...

    浅谈Java中return和finally的问题

    2. **`return` 与 `finally` 的执行顺序**:在 `try` 块中遇到 `return` 时,会先执行 `finally` 语句块,然后再返回值。这是因为 `finally` 中的代码优先级高于 `return`,即使 `return` 已经被触发,`finally` ...

    java finally块执行时机全面分析

    例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,根据《深入Java虚拟机》一书的描述,`finally`块的实现是通过`jsr`...

    Java的throw和return

    1. **异常抛出前执行**:如果在`try`块或`catch`块中抛出了异常,并且这个异常没有被捕获或者被重新抛出,那么在抛出异常之前,系统会先执行`finally`块中的代码。这意味着即使程序因为异常而提前终止,`finally`块...

    try catch finally的执行顺序深入分析

    如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值将是`finally`块中的`return`值。这是因为`finally`块的执行优先级高于`return`语句,它确保了资源的...

    finally 一定会执行(实例代码)

    `打印0,因为在`finally`块之前,`res`的值被重置为0。 6. `return res + 3;`返回5。 7. `main`方法中,`b`被赋值为5,打印"main b= 5"。 **异常执行情况**: 1. 如果`e.b`未被初始化,`e.a / e.b;`会抛出`...

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

    但是,由于 `finally` 块的存在,程序在真正返回之前会先执行 `finally` 块中的代码,即 `print('finally')`。 这意味着即使函数即将返回,`finally` 块中的代码仍然会被执行。这对于那些期望函数返回后立即退出的...

    完全解析Java编程中finally语句的执行原理

    在清单1的示例中,由于`i = i / 0`导致了`ArithmeticException`,程序在进入`try`块之前就抛出了异常,因此`finally`块没有执行。同样,如果移除`return`语句的注释,程序在`try`块内返回,`finally`块依然不会执行...

    Java 实例 - Finally的用法源代码-详细教程.zip

    - 即使`return`语句在`try`或`catch`块中出现,`finally`块的代码也会在返回之前执行。但要注意,`finally`块中的`return`语句会覆盖掉`try`或`catch`中的`return`结果。 3. 示例代码: ```java try { // 可能...

Global site tag (gtag.js) - Google Analytics