大家面试的时候想必会遇到这种面试题,要我们输出结果。。。

其实在实际的业务中呢一般都是用finally来关闭流的,很少做其它业务操作,所以呢大家也就容易忽视掉这个问题

首先在finally和try中对数据的操作时数据分为 基本数据类型和引用数据类型,他们存放的地方也不一样,一个是栈区另一个是在堆区。

首先我们对基本数据类型的结果进行分析:

1 finally 中没有return

public class Main {private  static  int a=2;public static void main(String[] args) {System.out.println("test输出的结果 "+test());System.out.println("main 自加后 a="+(a++));}private  static  int test(){try {a+=3;System.out.println("try  a="+a);return a;}catch (Exception e){}finally {++a;System.out.println("finally a="+a);}return 0;}
}

输出结果:

try  a=5
finally a=6
test输出的结果 5
main a=6

结论: 可见方法test的返回值不受finally中的影响,但是变量a还是受到了影响,值改变了,返回值是存放在栈中的,return是就           已经把返回值压入栈了,相当于一个临时变量。在finally中并不会影响返回值

2 在finally 中加入 return

..............................

finally {

++a;

System.out.println("finally a="+a);

return a;

}

输出结果:

try  a=5
finally a=6
test输出的结果 6
main a=6

结论: 此时test方法的返回值是6和a的值相等, 在try,catch中的返回值可以发现被finally的返回值给屏蔽了,所以如果finally中              有return则会屏蔽当前方法中的返回值

现在对引用变量进行分析

1 finally中没有return

public class Main {private  static List<String> list=new ArrayList<>();public static void main(String[] args) {System.out.println("test输出的结果 "+test());System.out.println("main list="+list.toString());}private  static  List test(){try {list.add("33");System.out.println("try  list="+list.toString());return list;}catch (Exception e){}finally {list.add("66");System.out.println("finally list="+list.toString());}return null;}
}

输出结果:

try  list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]

结论: 通过结果可以知道 test的返回值内容也是跟集合list一样的, 因为list是引用类型所以堆区中存放了内存地址,在finally对值          进行改变时还是只想同一个地址,只是地址的内容变化了

2 finally中有return 、

输出值:

try  list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]

结论:可见引用类型时finally有没有return都会对当前方法的返回值产生影响

try,catch,finally的执行顺序问题相关推荐

  1. try catch finally的执行顺序到底是怎样的?

    首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分. 关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置 ...

  2. 有return的情况下try catch finally的执行顺序

    前言,在写java 异常捕捉块的时候,有时候用到return,有时有各种情况,不仔细分析的化就会出现意想不到的问题,所以我测试一般情形,用于记录一下. 情景1:try{}catch{}finally{ ...

  3. 一道异常处理执行顺序面试题的简单分析

    异常处理,我们写的代码里经常会用到:try{}catch{}finally{}.可是大家真的了解它吗? 下面的代码,运行结果是什么?大家猜一下: View Code static class Prog ...

  4. java子类代码块_java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  5. java try、catch、finally及finally执行顺序详解

    1.为什么要用finally 先看一个没有finally的异常处理try-catch语句: 假设count为要使用到的资源,并且用完要求释放此资源.那么我们可以把释放资源的语句放到try-catch后 ...

  6. java catch中 return_JAVA中try、catch、finally带return的执行顺序总结

    try catch  以后只要没有抛出新异常或者return,代码会继续往下执行的. 异常处理中,try.catch.finally的执行顺序,大家都知道是按顺序执行的.即,如果try中没有异常,则顺 ...

  7. try catch嵌套执行顺序测试

    分享一段测试try catch 执行顺序和那些代码后续执行,那么不执行的代码: @Testpublic void testTryCatch(){try {System.out.println(&quo ...

  8. 细琢磨,try catch finally 执行顺序与返回值

    try catch finally 常见格式如下: try{//应用代码}catch(Exception e){//异常捕捉处理}finally{//资源释放.流关闭等等 } 通常执行顺序: try有 ...

  9. try catch finally return的执行顺序与返回值探究

    下午看了一下百度文库中下载下来的java笔试题,其中一道就是关于这个问题的,所以写了个测试程序验证了一下,另外具体的理论知识搜罗了网上的资料. 测试程序如下: package com.andy.cod ...

最新文章

  1. 修改oracle数据库默认时间格式
  2. wdcp3.2.6版 https全站跳转 标记待细化
  3. 计算机实现减法学习心得
  4. MySQL—创建数据表
  5. 静态配置_Linux网络配置之NAT静态ip配置
  6. echarts——父元素宽度100%,但canvas宽度100px
  7. ELM327 scanners work on iPhone, iPad and iPod
  8. 012.Adding a New Field --【添加一个新字段】
  9. Golang 学习资料
  10. vscode 用户配置添加 分号、保存格式化、单引号、function格式
  11. MySQL多实例配置
  12. gitlab CI/CD 知识点查阅
  13. elt php,ELT(数据仓库技术) 学习
  14. 当子元素设置position absolute的时,父元素必须设置position属性
  15. 物业计算机管理系统论文,物业小区管理系统 计算机专业毕业论文.doc
  16. 计算机网络校园网建设设计摘要,计算机网络专业毕业论文校园网建设设计.doc...
  17. 软件测试面试自我介绍
  18. suse下oracle静默安装,SUSE Linux Enterprise 11SP1静默安装Oracle 11gR2说明文档.doc
  19. 在电脑上安装Linux系统步骤
  20. Linux ubuntu 装openCV,Linux(ubuntu 16.04) 安装 opencv C++

热门文章

  1. 我的Ubuntu配置
  2. matlab如何设置金属光泽,带金属光泽的模型shader的实现
  3. Lazada店铺如何设置使用 支付宝收款-图文教程
  4. java数组初始化赋值_数组初始化与赋值
  5. http和https有什么区别 端口号多少
  6. 向上累计频率怎么计算_第三代OLED材料性能的第一性原理计算:通过DFT预测TADF逆向系间窜跃速率...
  7. ubuntu系统分辨率只有640*480的解决办法,适用部分正方形屏幕
  8. 我国疫苗监管体系通过世卫组织新一轮评估
  9. Camtasia添加弹题交互教程
  10. UltraISO Premium Edition v9.5.2.2836注册码