try中有return,finally中的code会不会执行,执行是在return前还是后?

原创 2017年01月03日 14:44:21
注:
1.当finally中没有return,但是try中有return时,执行顺序是try--finally--return,但是finally中不会修改在try中的值,在try中的值会保存到函数栈中,继续执行finally,执行完后,再从栈中取出返回;代码如下
public class FinallyTest  
{	public static void main(String[] args) {
	      System.out.println(new FinallyTest().test());;
	}
      static int test(){
		int x = 1;
	try{
		x++;
		return x;}
	finally{
		++x;
	}}}
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
2.当finally中和try中都有return时,执行顺序是先执行try中,将要返回的结果保存到函数栈中,在执行finally中,此时finally中会返回在该快中的值,而不会执行try中的return语句,代码如下:
public  class Test {
  public static void main(String[] args) {
System.out.println(new Test().test());
}
int test(){
try{
return func1();}
finally{
return func2();}}
int func1(){
System.out.println("func1");
return 1;}
int func2(){
System.out.println("func2");
return 2;}
-----------执行结果----------------- 
func1
func2

2

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

对象比较中equals与==的区别

关于变量之间的比较,可以分为基础类型变量的比较和对象之间的比较。 对于基本类型来说,他们存储在jvm的栈中,因此比较的是变量的内容,也就是比较的变量的值。 对于引用类型来说,因为对象内...

单元测试(对项目中某一个独立业务模块进行单独的测试)

1.创建一个单元测试的测试案例(AndroidTestCase) 2.要在清单文件中进行相关的配置(基本可以提示出来) ...

(java)try{}中有一个return语句,那么紧跟在其后的finally会不会执行?什么时候执行?

实践是检验真理的唯一标准,废话不说,上图。 首先是java代码 package zjyang.runprogram; public class TestReturnFinally { publi...

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果: public  class Test {     public stati...
  • ZXFC88
  • ZXFC88
  • 2013年03月26日 20:54
  • 4384

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

今天做了一道题,一直以为try

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?

这是一个很有趣的问题,我测试的结果是:是在return中间执行。 我在网上搜寻了一些资料,下面是参考代码: 1 /** 2 * 3 */ 4 package com.b5...

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?

这是一个很有趣的问题,我测试的结果是:是在return中间执行。 我在网上搜寻了一些资料,下面是参考代码: /** * */ package com.b510.test; /** ...
  • paul342
  • paul342
  • 2015年08月06日 15:18
  • 666

Java中try、finally语句中有return时的执行情况

在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子...

try-catch-finally语句中有return语句时的执行情况

在try中没有异常的情况下try、catch、finally的执行顺序 try --- finally 如果try中有异常,执行顺序是try --- catch --- finally 如果try中...

try catch finally中有return语句的执行情况及原因分析

前言之前在学习Java异常时遇到了try cathc finally中有return的情况,但是到底return执不执行,以怎样的顺序执行,以及原因是什么,还没弄清楚。 1 执行顺序以及原因先来看一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:try中有return,finally中的code会不会执行,执行是在return前还是后?
举报原因:
原因补充:

(最多只允许输入30个字)