我们都知道,在Java中try、catch和finally常用来做异常处理,而且他们有执行顺序,即先执行try,如果try中没有异常,则执行完try语句块后执行finally语句块,如果try中有异常,则顺序为执行到try语句块抛异常的地方后跳到catch语句块,最后执行fianlly语句块,但是当try、catch、finally中加入return之后,情况就有不同了,我们下面分别结合常见面试题来说明一下。

我们结合下面的程序,看看最终getInt()=?

public static void main(String[] args) {System.out.println("getInt()=" + getInt());}public static int getInt() {int a = 10;try {System.out.println(a / 0);a = 20;} catch (ArithmeticException e) {a = 30;System.out.println("走到catch,a=" + a);return a;} finally {System.out.println("走到finally,a=" + a);a = 40;System.out.println("走到finally,a=" + a);}System.out.println("走到最后a=" + a);return a;}

我们分析下执行顺序,0肯定不能为除数,所以直接抛异常调到catch语句块,先输出:走到catch,a=30
然后直接return a,程序执行到这一步的时候,形成返回路径,return 30
然后发现finally语句块,所以肯定要执行finally语句块的,先是输出:走到finally,a=30,再然后输出:走到finally,a=40
到此,程序执行结束,所以最终getInt()=30
因为catch语句块里已经return a形成返回路径,所以最后两句话不会执行。

如果我们注释掉catch语句块的return a,那么程序最后两句肯定执行(因为没有return),所以最终getInt()=40
如果我们注释掉catch语句块的return a,注释程序最后两句,在fianlly语句块里加return a,那么最终getInt()=40

下面我们结合String来说明,看看最终Stringget()=?

public static void main(String[] args) {System.out.println("Stringget()=" + Stringget());}public static String Stringget() {String a = "我最喜欢胡歌";try {System.out.println("try……我最喜欢的电视剧是《仙剑奇侠传一》");return a;} catch (Exception e) {System.out.println("catch……我最喜欢的歌曲是《逍遥叹》");} finally {a = a + " 并且我最喜欢的书籍是《山海经密码》";System.out.println("finally……我说完咯");}return a;}

首先,执行try语句块,输出:try……我最喜欢的电视剧是《仙剑奇侠传一》
因为程序不抛异常,所以不会执行catch语句块,所以直接执行finally语句块,输出:finally……我说完咯
因为try语句块里已经return,此时a这个String对象为我最喜欢胡歌,所以最终Stringget()=我最喜欢胡歌

如果我们把最后的return a加到fianlly语句块里:

当finally中有return的时候,try中的return会失效,在执行完finally的return之后,就不会再执行try中的return。这种写法,可以编译通过的,但是编译器会给予警告,所以不推荐在finally中写return,这会破坏程序的完整性,而且一旦finally里出现异常,会导致catch中的异常被覆盖。

总结:
1、finally中的代码总会被执行。
2、当try、catch中有return时,也会执行finally,但要注意return的返回值类型,是否受到finally中代码的影响。
3、finally中有return时,会直接在finally中退出,导致try、catch中的return失效。

try catch和finally搭配return执行常见面试题讲解相关推荐

  1. [Java面试]六:常见面试题之设计模式

    我的博客首页:http://blog.csdn.net/m0_37116405 我的GitHub首页:https://github.com/KissLouis 设计模式六大原则 开闭原则:对扩展开放, ...

  2. Java开发常见面试题详解(JVM)_2

    Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...

  3. 【面试题】Java常见面试题集锦

    Java常见面试题集锦 面试题模块 这份面试题,包含的内容了十九了模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC. ...

  4. 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总

    1.面试题模块汇总 面试题包括以下十九个模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC.Spring Boot/S ...

  5. BTA 常问的 Java基础40道常见面试题及详细答案,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  6. C++常见面试题,来看看你会几个~~

    C++常见面试题汇总: 写在开篇:汇总了一些公司的常见C++面试题~~收藏起来呀!! 正文开始@Assassin 目录: C++常见面试题汇总: 1. 变量的声明和定义有什么区别: 2. 简述#ifd ...

  7. 测试开发岗 - 常见面试题

    目录 1. 什么是软件测试, 谈谈你对软件测试的了解 2. 我看你简历上有写了解常见的开发模型和测试模型, 那你跟我讲一下敏捷模型 3. 我看你简历上还写了挺多开发技能的, 那你给我讲讲哈希表的实现流 ...

  8. ConcurrentHashMap(jdk1.8)讲解及常见面试题

    文章目录 前言 一.ConcurrentHashMap存储结构 二.存储元素 1.第一步:初始化数组长度 2.第二步:索引位为空时存储元素 3.第三步:索引位不为空时存储元素 4.第四步:并发扩容 三 ...

  9. Java进阶之深入理解对象与垃圾回收机制常见面试题

    内存泄漏和内存溢出辨析 内存溢出:实实在在的内存空间不足导致: 内存泄漏:该释放的对象没有释放,多见于自己使用容器保存元素的情况下. 常量池与String 常量池 常量池有很多说法,包括运行时常量池. ...

最新文章

  1. Spring 整合 Junit
  2. 使用B::Deparse模块对perl代码反汇编
  3. pybind11回调函数返回指针
  4. iOS----------iPhone导出手机所有短信
  5. 算法导论第十二章:二叉查找树
  6. 68.connect-flash 用法详解 req,flash()
  7. 准爸爸日记——20120311
  8. C:#define用法
  9. selenium 文件上传
  10. Hybris产品主数据的价格维护
  11. delphi ascii字符数组_344. 反转字符串
  12. ActiveMQ群集,持久订阅者和虚拟主题可助您一臂之力
  13. LOJ10157——皇宫看守(树形DP)
  14. 一位腾讯离职创业 6 年 CEO 的忠告:不要等公司倒闭,才思考这 3 个问题
  15. 计算机网络安全(一)
  16. ikm2022/IKM考试/ikm java
  17. 元分析教程 | 手把手教你使用CMA 2.0
  18. Java web登录验证码
  19. eCharts绘制双系列混合类型图表+额外tooltip信息
  20. python语句print(type(1j))的输出结果_Python 语句print(type(1J))的输出结果是:_学小易找答案...

热门文章

  1. wifi不可靠 无线局域网八大安全困惑
  2. 移动硬盘中安装Windows10
  3. 软件推荐-国内参数优化软件:1stOpt - First Optimizationg
  4. 他山之石 | 预训练模型在华为推荐中的应用与探索
  5. 切面的优先级、重(chong)用切点表达式
  6. SpringBoot-AOP环绕通知记录日志/鉴权
  7. 本地html页面录音,JavaScript实现页面中录音功能的方法
  8. 网络游戏开发之安全对抗
  9. CTF中的PHP反序列化ALL IN ONE
  10. 关于历史人物曹操的所有故事