首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试被问finally 和 return,到底谁先执行?

经常有人面试被问到,finally 和 return,到底谁先执行呢? 为了解决这个问题,其实我们可以先想想 finally 是被用来干嘛的呢?它是被用来结束一些正常的收尾动作或结束标识。...1 执行 finally return result: 1 也就是说,在执行 return 之前,先执行了 finally。...执行 finally 執行 return 2 return result: 1 总结:finally 在 return 之后时,先执行 finally 后,再执行该 return;finally 内含有...return 时,直接执行其 return 后结束;finally 在 return 前,执行完 finally 后再执行 return。...接下来还有常被问到的是:Java 中 final、finally、finalize 的区别与用法 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

1.8K20

关于Java中return和finally的执行顺序

; } finally { System.out.println("finayll 执行... "); } 在try或者catch语句里面,如果有return语句,那么finally...会不会执行?...即使有return语句,finally块在执行完try或者catch块代码之后是会被调用的,但是特殊情况下finally块语句是不会被执行的,如下几种情况: (1)在try和catch块之中执行System.exit...()方法直接退出虚拟机 (2)jvm突然崩溃或者机器宕机等硬件故障 (3)执行了无限循环,或者其他不可被打断,不可被终止的语句 (4)执行了kill -9 pid 命令 此外,要避免一些坏的编程风格:...(1)在finally中使用return语句,虽然java是支持的,但一旦在finally中使用return那么try和catch中的return就不会被执行。

66230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    这是一个很有趣的问题,我测试的结果是:是在return中间执行。...语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?...上图是程序执行到try模块里面:变量"i"的值的情况。 ?...上图是程序执行到了try模块中的return语句时,按下F5键,进入到finally模块,执行finally模块中的语句后,变量"i"的值发生了变化。 ?...上图是当程序执行完finally模块后,返回到return代码块。 但是在最后的运行效果中,我们看到的结果是:1,而不是我们想象中的:2 为什么会出现这样的情况: ? 上面我认为比较靠谱的一种解释。

    1.2K30

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

    (注意参考系) 示例代码如下: 1 package cn.itcast_07; 2 3 /* 4 * 面试题: 5 * 1:final,finally和finalize的区别 6 *...13 * 14 * 2:如果catch里面有return语句,请问finally里面的代码还会执行吗? 15 * 如果会,请问是在return前,还是return后。...(相对于最后一个能执行到的return语句来说) 17 *   准确的说,应该是在中间。...a; 40 /* 41 * return a; 在程序执行到这一步的时候,这里不是return a; 而是return 30; 这个返回路径就形成了。...42 * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 43 * 再次回到以前的返回路径,继续走 return 30

    1.7K20

    Carson带你学Java:不同情形下return 和 finally的执行顺序

    前言 在Java中,不同情形下return 和 finally的执行顺序很多人混淆不清 本文全面 & 详细解析不同情形下return 和 finally的执行顺序,希望你们会喜欢 目录 储备知识 终极结论...具体场景分析 下面,我将根据具体的使用场景来全面解析不同情形下return 和 finally的执行顺序 3.1 try 或 catch中存在return语句、finally无return语句 执行顺序...执行 try块语句 * 2. 执行 throw 语句 :此时已抛出异常,运行因异常而终止,故不执行return1 * 3....b. try / catch中任意1者 或 都有return(try中的return和catch中的return最多只有1个会执行)、finally中 有 return /** * 情况1:try...总结 本文主要讲解了不同情形下return 和 finally的执行顺序,总结如下: 5.

    30520

    自制Monkey语言编译器:解释执行return语句和错误处理控制

    代码中存在两个if 间套,内层if执行return语句附带返回整数10,外层if 最后执行return语句附带放回数值1,根据代码逻辑,最后一条语句也就是return 1;不会被编译器所执行,编译器会把内层...,这么修改之后,我们就能处理前面说的if语句间套中包含return指令的问题,至于其中的详细原理,点击如下链接,查看视频讲解和代码调试演示:更详细的讲解和代码调试演示过程,请点击‘阅读原文’。...完成上面代码之后,编译器就能正确的解释执行return语句了,更详细的讲解和代码调试演示,请参看上头给出的视频链接。接下来我们要为编译器添加错误处理信息。...上述代码把一个整形和一个布尔型数据相加,这在逻辑上走不通,因此在编译器看来是一种逻辑错误,当出现这种错误是,编译器就得报错,并停止继续往下执行代码。编译器报错情况如下: ?...:- ", right.type()) } .... } 在evalProgram函数中,它会把所有子节点就像解释执行,但如果在执行中间遇到错误时,那么就必须终止执行流程

    72550

    Java:一文带你了解 不同情形下return 和 finally的执行顺序

    前言 在Java中,不同情形下return 和 finally的执行顺序很多人混淆不清 本文全面 & 详细解析不同情形下return 和 finally的执行顺序,希望你们会喜欢 ---- 目录...具体场景分析 下面,我将根据具体的使用场景来全面解析不同情形下return 和 finally的执行顺序 3.1 try 或 catch中存在return语句、finally无return语句 执行顺序...执行 try块语句 * 2. 执行 throw 语句 :此时已抛出异常,运行因异常而终止,故不执行return1 * 3....} /** * 情况2:try / catch中任意1者 或 都有return(try中的return和catch中的return最多只有1个会执行)、finally中 有 return...总结 本文主要讲解了不同情形下return 和 finally的执行顺序,总结如下: ?

    68120

    其实return和finally的执行顺序问题非常简单,你只有看看代码的指令就清楚咯

    最近在整理Java常见的面试题,刚好整理到return和finally的执行顺序问题,这个很多小伙伴比较困惑,所以波波老师就通过指令带大家彻底弄清楚下 return和finally的顺序问题   ...代码执行的时候会将局部变量保存在 栈帧的顶部,然后在finally中修改的还是原来的栈帧位置的局部变量,最终返回的信息还是栈帧顶部的变量,所以finally代码块在return关键字之后会执行,但是不会改变栈帧顶部的信息...当执行方法时,如上面的getName,就会创建一个栈帧(存储局部变量表,操作数栈等信息)进入虚拟机栈。每一个方法从调用到执行完毕,就是一个栈帧从虚拟机栈中入栈到出栈的过程。...aload:将制定的引用类型变量推送至栈顶 查看关键的指令为: 还有一种情况需要注意,如果finally和try块中都有return关键字会怎么样呢?...深入JVM指令分析return和finally的执行顺序问题

    52220

    如何更好的取消一个promise?

    == undefined) { controller.abort(); //终止请求 } if ("AbortController" in window) {...方案1 - 借助reject 方法 我们都知道一个promise对象状态的改变是通过resolve和reject来执行的。那是不是可以借助reject方法来模拟呢?...所以后续的promise的resolve和reject都不会再被执行了。 代码很简单,其实够短小精悍。...//传入一个正在执行的promise function getPromiseWithAbort(p){ let obj = {}; //内部定一个新的promise,用来终止执行...最后 其实取消promise执行和取消请求是一样的,并不是真的终止了代码的执行,而是对结果不再处理。另外fetch api虽然增加了新的标准实现,但仍然存在兼容问题,而且只能在浏览器中使用。

    5K20

    前端魔法堂——异常不仅仅是trycatch

    在学习Java时我们会被告知异常(Exception)和错误(Error)是不一样的,异常是不会导致进程终止从而可以被修复(try/catch),但错误将会导致进程终止因此不能被修复。...当对于JavaScript而言,我们要面对的仅仅有异常(虽然异常类名为Error或含Error字样),异常的出现不会导致JavaScript引擎崩溃,最多就是让当前执行的任务终止而已。  ...上面说到异常的出现最多就是让当前执行的任务终止,到底是什么意思呢?这里就涉及到Event Loop的原理了,下面我尝试用代码大致说明吧。...,最终终止当前任务的执行; // 3.JavaScript线程会继续从任务队列中提取下一个任务继续执行。...function a(){throw Error("test")} function b(){a()} b() console.log("永远不会执行!")

    1.5K70

    前端魔法堂——异常不仅仅是trycatch

    在学习Java时我们会被告知异常(Exception)和错误(Error)是不一样的,异常是不会导致进程终止从而可以被修复(try/catch),但错误将会导致进程终止因此不能被修复。...当对于JavaScript而言,我们要面对的仅仅有异常(虽然异常类名为Error或含Error字样),异常的出现不会导致JavaScript引擎崩溃,最多就是让当前执行的任务终止而已。  ...上面说到异常的出现最多就是让当前执行的任务终止,到底是什么意思呢?这里就涉及到Event Loop的原理了,下面我尝试用代码大致说明吧。...,最终终止当前任务的执行; // 3.JavaScript线程会继续从任务队列中提取下一个任务继续执行。...function a(){throw Error("test")} function b(){a()} b() console.log("永远不会执行!")

    1.1K30
    领券