参考: https://blog.csdn.net/chengzhezhijian/article/details/17264531

面试一家公司的面试题,注: 那个面试官对这个问题挺看重的(可是我回答对了,不知道原理)

  1. 下面是测试
  1. public static int fun2(){
  2. try {
  3. System.out.println("哈哈哈");
  4. return 1;
  5. } catch (Exception e) {
  6. System.out.println("exception");
  7. }finally{
  8. System.out.println("finally");
  9. }
  10. return 100;
  11. }
  12.  
  13. public static void main(String[] args) {
  14. System.out.println(fun6());
  15. }
  16.  
  17. 结果:
  18. 哈哈哈
  19. finally
  20. 1
  21. 总结: // 如果在try中返回数据,finally中的代码也会执行

  

  1. //在try中返回数据,即使在finally中对此值做了修改,还是返回try中最后修改的数据
  2. public static int fun3(){
  3. int i = 1;
  4. try {
  5. System.out.println("哈哈哈");
  6. return i++;
  7. } catch (Exception e) {
  8. System.out.println("exception");
  9. }finally{
  10. ++i;
  11. System.out.println("finally");
  12. }
  13. return i;
  14. }
    结果:
        哈哈哈
  15.  
  16.     finally

      1

     总结: 虽然 finally中的代码执行了,并且修改了i的值,但是最后返回的还是之前的值

  

  1. //在finally代码块中返回数据,程序会提前退出,最后面return i 编译都通过不了
  2. public static int fun4(){
  3. int i = 1;
  4. try {
  5. System.out.println("哈哈哈");
  6. } catch (Exception e) {
  7. System.out.println("exception");
  8. }finally{
  9. ++i;
  10. System.out.println("finally");
  11. return i;
  12. }
  13. // return i;
  14. }
  15.  
  16. 结果:
  17. 哈哈哈
  18. finally
  19. 2

  try中的代码情况和catch中的一致,网上有说用引用类型不一样,这里我也测试了,引用类型在finally代码中修改和基本类型是一样的情况

  为什么会出现执行了finally中的代码,返回的值确没有变化呢,也查询了一些资料,目前的我的理解是这样 在finally代码中修改的值会存放在方法区, 而try中返回的i(基本数据类型) 是存在栈区的,所以最终返回的值不会因为finally做了改变而改变,同样引用类型的值是存放在堆区的,自然也不会改变

  上述仅个人总结,有不对的还望大佬指出!!

try-catch-finally的问题的更多相关文章

  1. SQLServer如何添加try catch

    在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...

  2. try...catch..finally

    try..catch..finally try{ 代码块1 }catch(Exception e){ 代码块2 }finally{ 代码块3 } catch是抓取代码块1中的异常 代码块2是出异常后的 ...

  3. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  4. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  5. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...

  6. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

  7. try catch里面try catch嵌套

    try catch里能否内嵌try catch?答案是肯定的.但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码 static void Main(string[] args) { ...

  8. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  9. java try(){}catch(){}自动资源释放

    从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Manag ...

  10. Java throws Exception、try、catch

    throws Exception是方法后面接的 意思是向上级抛出异常 try{}里面的异常会被外面的catch捕捉到 抛出异常是throw new Exception("异常"); ...

随机推荐

  1. Oracle10g RAC 关闭及启动

    情况1: 保养数据库及操作系统,服务器,需要关闭DB(所有实例),OS 及Server . a. 首先停止Oracle10g 环境 $ lsnrctl stop (每个节点上停止监听,也可以用srvc ...

  2. 【python】字符串编码问题

    参考:http://blog.csdn.net/tingsking18/article/details/4033645 python内部的字符串是以unicode来编码 decode函数用来将其他编码 ...

  3. RPolar项目进度记录

    PolarMesDlg.cpp,中的 void PolarMesDlg::CImage2CImagedata(unsigned char* src,CImage* desimg,unsigned ch ...

  4. iOS开发之 -- oc和swift下输出乘法口诀表

    闲来无事,写着玩: oc: //乘法口诀表输出 ; i<=; i++) { ; j<=i; j++) { NSLog(@"%dx%d=%d\n",i,j,i*j); } ...

  5. iOS 友盟统计怎么用

    本文转载至 http://blog.csdn.net/woaifen3344/article/details/41284395 友盟统计UMAnalyticsiOS友盟统计iOS UMAnalytic ...

  6. 【BZOJ3190】[JLOI2013]赛车 单调栈+几何

    [BZOJ3190][JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2……gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进 ...

  7. java如何计算两个经纬度之间的距离?

    /*计算两个经纬度之间的距离 结果单位:米 */public static double getDistance(String lat1Str, String lng1Str, String lat2 ...

  8. delphi --批量添加

    公共批量添加方法 function BatchSQL(DC : TADOConnection; Qry : TADOQuery; StrSQL : TStrings): Boolean; var i ...

  9. SQLServer中计算周

    --本周最大值与最小值.平均值 DECLARE @WeekMax float,@WeekMin float,@WeekAvg float,@AddDate varchar(20) DECLARE @W ...

  10. <2014 05 21> 互联网时代的C语言——Go(2)

    **************************************************************************************************** ...