zoukankan      html  css  js  c++  java
  • return和finally究竟谁先执行,还有return是怎么返回数据的

    今天突然有见到一个关于return和finally谁先执行的问题,有点疑惑就上网上查了查并写代码验证了一下。

    先看如下图的代码执行结果:

     在此处证明了finally代码块并没有因为return语句的执行结束当前方法,从而没有执行finally语句,侧面的说明了一个问题就是finally代码块是一定会执行的。

    然后有一个问题就是finally代码块执行了,里面给变量a赋值为20,但是输出的结果却是10,这又是为什么呢?

     然后这里就需要下一段代码来说明这个问题了,这里其实牵涉到一个方法的返回值是怎么返回给调用者的。

    请看如下代码:

     

     看着个最终的执行结果,我们可以得出同样的的结论就是代码即使执行了return语句,但是finally代码块肯定还是会执行的,那么就是刚提出的问题,上班第一段代码中finally代码块执行了,但是为啥a的结果是10,却没有变成20,原因是变量a是一个基本类型变量,所以能呢,对基本类型变量的赋值,是值传递,在调用test方法是,因为这个方法有返回值,所以在内存中会在方法钱预留一块内存空间用来放返回值变量,所以第一段代码里存储的是值10,后来执行了finally代码块把a的变量给赋值为20,但是test方法的调用者拿到的是方法预留的那块内存空间的值,所以结果是10,而第二段代码中的,返回值类型是引用类型,所以当引用类型进行赋值的时候是进行的引用传递,因此test方法的调用者拿到的是一个引用变量,其实是一个内存空间的地址值,所以finally代码块中执行后会改变返回值。

    总结:finally代码块是一定会执行的,即使前边先执行了return语句,它也同样执行,至于finally会不会修改返回值,这取决与方法的返回值类型究竟是基本类型还是引用类型(对基本类型和引用类型不熟悉的请自行学习)

  • 相关阅读:
    EntityFramework查询联合查询(Join,GroupJoin)
    浏览器向服务器请求页面的原理
    如何获取浏览器类型和版本
    64位Win7下32位IE无法启动问题
    jQuery 收藏
    JavaScript五种继承方式[转]
    针对模板页面的数据爬虫实现方法探讨
    ArcGISFlexSDK中关于切换地图问题(不同范围)
    NodeJS缓存文件夹遍历
    高通配置uart
  • 原文地址:https://www.cnblogs.com/ZHP-Study-share/p/11782365.html
Copyright © 2011-2022 走看看