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

你真的了解try{ return }finally{}中的return?

今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int...验证 finally 语句是否会执行,以及 return 和 finally的执行顺序 在求知欲的驱动下,我继续进行更深的探索,果断打开了Oracle的主页,翻阅了java 官方教程的finally语句...个人简单翻译: 当try语句退出时肯定会执行finally语句。这确保了即使发了一个意想不到的异常也会执行finally语句块。...但是finally的用处不仅是用来处理异常——它可以让程序员不会因为return、continue、或者break语句而忽略了清理代码。...因为规范规定了,当try和finally里都有return时,会忽略try的return,而使用finally的return。

1.3K50

Java关键字 Finally执行与break, continue, return等关键字的关系

接下来我就带您一步一步的揭开这个 finally 的神秘面纱。 问题分析 首先来问大家一个问题:finally 语句块一定会执行吗?...这样的问题。看来,大多时候,并不是 Java 语言本身有多么高深,而是我们忽略了对基础知识的深入理解。 接下来,我们看一下 finally 语句块是怎样执行的。...我们先来看一下正常执行的情况,如图 1 所示: 图 1. getValue()函数正常执行的情况 ?...这就是为什么清单 6 的执行结果是 1,而不是 2 的原因。 再让我们来看看异常执行的情况。是不是有人会问,你的清单 6 中都没有 catch 语句,哪来的异常处理呢?...图 2. getValue()函数异常执行的情况 ? 先说明一点,上图中的 exception 其实应该是 exception 对象的引用,为了方便说明,我直接把它写成 exception 了。

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

    c语言的三种语句

    else总跟最接近的if匹配这样很可能会构成逻辑错误,会把相近的语句进行对齐:悬空else问题 #include int main() { int a = 0; int b = 0...0; } 我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印 ​ 原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤...\n"); return 0; } goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀...进行强制转换为整型 srand((unsigned int)time(NULL)); //一开始就要进行循环,选择do while语句 { menu();//引入一个函数,就是菜单...如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力! ​

    28410

    再谈try{ return }finally{}中的return?

    如果有请在评论里告诉我一声,让我知道,我并不孤单~~) 根据已有的知识知道: return 是可以当作终止语句来用的,我们经常用它来跳出当前方法,并返回一个值给调用方法。...验证 finally 语句块是否会执行,以及 return 和 finally的执行顺序 在求知欲的驱动下,我继续进行更深的探索,果断打开了Oracle的主页,翻阅了java 官方教程的finally语句块...简单翻译: 当try语句块退出时肯定会执行finally语句块。这确保了即使发了一个意想不到的异常也会执行finally语句块。...但是finally的用处不仅是用来处理异常——它可以让程序员不会因为return、continue、或者break语句而忽略了清理代码。...因为规范规定了,当try和finally里都有return时,会忽略try的return,而使用finally的return。

    1.5K40

    JavaScript中在try里面放return,finally还会执行吗?

    我们比较常见的语句包括变量声明、表达式、条件、循环等,这些都是大家非常熟悉的东西,对于它们的行为,我在这里就不赘述了。...Completion 类型 我们来看一个例子。在函数 foo 中,使用了一组 try 语句。我们可以先来做一个小实验,在 try 中有 return 语句,finally 中的内容还会执行吗?...虽然 return 执行了,但是函数并没有立即返回,又执行了 finally 里面的内容,这样的行为违背了很多人的直觉。...空语句; 4. debugger 语句; 这些语句在执行时,从前到后顺次执行(我们这里先忽略 var 和函数声明的预处理机制),没有任何分支或者重复执行逻辑。...带标签的语句 前文我重点讲了 type 在语句控制中的作用,接下来我们重点来讲一下最后一个字段:target,这涉及了 JavaScript 中的一个语法,带标签的语句。

    87120

    一个try-catch问出这么多花样

    刚刚面试回来的B哥又在吐槽了:现在的面试官太难伺候了,放着好好的堆、栈、方法区不问,上来就让我从字节码角度给他分析一下try-catch-finally(以下简称TCF)的执行效率.........小结 return的执行优先级高于finally的执行优先级,但是return语句执行完毕之后并不会马上结束函数,而是将结果保存到栈帧中的局部变量表中,然后继续执行finally块中的语句; 如果finally...请看 在正常情况下,它是一定会被执行的,但是至少存在以下三种情况,是一定不执行的: try语句没有被执行到就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是...:相应的try语句一定被执行到; try代码块中有System.exit(0);这样的语句,因为System.exit(0);是终止JVM的,连JVM都停止了,finally肯定不会被执行了; 守护线程会随着所有非守护线程的退出而退出...8: astore_1是指将抛出的异常对象保存到局部变量表中的1位置处 从字节码指令的角度来讲,如果代码中没有异常抛出,TCF的执行时间可以忽略不计;如果代码执行过程中出现了上文中的第6条,那么随着异常表的遍历

    42350

    新手学习 react 迷惑的点(一)

    你可以讲上面的代码(忽略导入语句)放到在线 babel 里进行转化一下,发现 babel 会把上面的代码转化成: function A() {   // ...other code   return React.createElement...为什么要用 className 而不用 class React 一开始的理念是想与浏览器的 DOM API 保持一直而不是 HTML,因为 JSX 是 JS 的扩展,而不是用来代替 HTML 的,这样会和元素的创建更为接近...那还是不行的,不然官网也不会建议你调用 props 了,虽然 React 会在构造函数运行之后,为 this.props 赋值,但在 super() 调用之后与构造函数结束之前, this.props...undefined   }   // ... } 要是构造函数中调用了某个访问 props 的方法,那这个 bug 就更难定位了。...后记 这是这个系列的第一篇,这些问题也是在我的一个「React交流群」里大家提出来的一些他们刚学 react 的时候容易迷惑的点,下一篇不出意外就是解答以下迷惑的点,如果有其他的问题想知道的,欢迎在评论区留言

    71030

    Go语言核心36讲(Go语言进阶技术十三)--学习笔记

    echo函数接受一个string类型的参数request,并会返回两个结果。 这两个结果都是有名称的,第一个结果response也是string类型的,它代表了这个函数正常执行后的结果值。...第一,在echo函数和main函数中,我都使用到了卫述语句。我在前面讲函数用法的时候也提到过卫述语句。简单地讲,它就是被用来检查后续操作的前置条件并进行相应处理的语句。...我们在进行错误处理的时候经常会用到卫述语句,以至于有些人会吐槽说:“我的程序满屏都是卫述语句,简直是太难看了!”不过,我倒认为这有可能是程序设计上的问题。...其中的类型switch语句中有若干个case子句,分别对应了上述几个错误类型。当它们被选中时,都会把函数参数err的Err字段作为结果值返回。...如果我们在操作文件系统的时候得到了一个错误值,并且知道该值的潜在错误值肯定是上述值中的某一个,那么就可以用普通的switch语句去做判断,当然了,用if语句和判等操作符也是可以的。

    31801

    【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    C语言中,通过使用if语句来判断是否出现了例外,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的例外事件并进行处理。全程变量ErroNo常常用来反映一个异常事件的类型。...对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。...可能jvm认为一个方法里面有两个return语句并没有太大的意义,所以try中的return语句给忽略了,直接起作用的是finally中的return语句,所以这次返回的是finally。... java.lang.NumberFormatException,所以程序会先执行catch语句中的逻辑,t赋值为catch,在执行return之前,会把返回值保存到一个临时变量里面t ',执行finally...2 finally块中避免使用return语句,因为finally块中如果使用return语句,会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生 3 finally块中避免再次抛出异常,

    8.5K112

    怎么样才算是精通 Python?

    如果大家在看完我这篇回答之前,已经充分理解了我列出的各个知识点,那么,我相信你已经算是精通Python了。...这个else语句是在while语句正常结束的时候执行的。所以,按照语意来说,while循环的else起到的作用是and。...你可能觉得我有点钻牛角尖,那好,我再强调一遍,while循环中的else语句是在循环正常结束的时候执行的,那么请问: 如果while循环里面遇到了break语句,else语句会执行吗 如果while循环最后...,遇到了continue语句,else语句还会执行吗 如果while循环内部出现异常,else语句还会执行吗 这里的几个问题,大多数人都不能够很快的正确回答出来。...最后,对于一些同学的疑虑——招聘职位要求精通Python,我的回答是,他们并不奢望招到一个精通Python的人,他们只是想招到一个合格的工程师,而大部分的Python工程师,都,不,合,格!

    2.4K91

    C语言:基础知识

    ,则必须在main函数之前对所调用的函数进行声明,或者包含其被调用函数的头文件 • 一般约定返回0,在c语言中正常在返回0,异常会返回非0 int main() { printf("hello C\n"...左边出现箭头即为进入调试阶段 在进入调试状态后,比如想要监视某一个变量,添加本代码变量于监视窗口中添加完待监视项后,按f10 代码会一步一步运行,待监视项便也随着代码运行进行改变。...ret = Add(2, 3);//函数调⽤语句 return 0; } 8.4复合语句 复合语句其实就是前⾯讲过的代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句。...转向语句:break语句、goto语句、continue语句、return语句。 九、注释 注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。...如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。

    19010

    (25) 异常 (下) 计算机程序的思维逻辑

    finally语句有一个执行细节,如果在try或者catch语句内有return语句,则return语句在finally语句执行结束后才执行,但finally并不能改变返回值,我们来看下代码: public...} } 这个函数的返回值是0,而不是2,实际执行过程是,在执行到try内的return ret;语句前,会先将返回值ret保存在一个临时变量中,然后才执行finally语句,最后try再返回那个临时变量...如果在finally中也有return语句呢?try和catch内的return会丢失,实际会返回finally中的返回值。...以上代码中,5/0会触发ArithmeticException,但是finally中有return语句,这个方法就会返回2,而不再向上传递异常了。...在有了异常机制后,程序的正常逻辑与异常逻辑可以相分离,异常情况可以集中进行处理,异常还可以自动向上传递,不再需要每层方法都进行处理,异常也不再可能被自动忽略,从而,处理异常情况的代码可以大大减少,代码的可读性

    71060

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

    在高级编程语言中,大多含有一个指令叫return,也就是程序的执行指令流遇到该语句后不再往下执行,而是返回上一层,如果return后面附带数据的话,程序会把数据夹带到调用栈上一层的代码执行路径。...obj ... } ... } 当语法解析器解析到return语句时,会构造一个类型为”RetturnStatement”的语法树节点...完成上面代码之后,编译器就能正确的解释执行return语句了,更详细的讲解和代码调试演示,请参看上头给出的视频链接。接下来我们要为编译器添加错误处理信息。...或者在中序表达式中,编译器遇到了识别不了的运算符,那么它也会构造一个错误对象返回。...result } } 我们添加一个函数用于判断,eval函数在解释执行对应的语法树节点后,返回的是否是一个错误对象: // change 11 isError(obj

    72550

    Javascript 严格模式详解

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。...二、进入标志 进入"严格模式"的标志,是下面这行语句:   "use strict"; 老版本的浏览器会把它当作一行普通字符串,加以忽略。...如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。如果不同模式的代码文件合并成一个文件,这一点需要特别注意。...正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。   ...(1)对象不能有重名的属性 正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

    1.2K80

    Javascript 严格模式 “use strict”

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。...二、进入标志 进入”严格模式”的标志,是下面这行语句:   ”use strict”; 老版本的浏览器会把它当作一行普通字符串,加以忽略。...如果这行语句不在第一行,则无效,整个脚本以”正常模式”运行。如果不同模式的代码文件合并成一个文件,这一点需要特别注意。...正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。   ...(1)对象不能有重名的属性 正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

    96410

    深入理解Java异常处理机制 (笼统篇)

    try后面的复合语句称为受保护段,受保护段的代码有可能出现异常,因此在try部分进行异常检测。如果检测到异常,就通过throw语句抛掷这个异常。受保护段所调用的函数中也可以检测和抛掷异常。...在编写带有异常处理的程序时,还要注意:     (1)try语句块和catch语句块是一个整体,两者之间不能有其他的语句。     (2)一个try语句块后面可以有多个catch语句,但是。...不可以几个try语句块后面用一个catch语句。 5.程序中的异常 ? 有个疑问????     那么我们剩下的5行代码还会执行吗???? ?...,必须和catch或者finally联合使用;   03.catch代码块可以有多个,书写顺序必须是按照异常类型的继承关系从小到大书写;   04.如果try代码块中出现了return,也是先执行finally...06.在catch中指定具体的异常类型   07.不要在catch块中忽略捕获的异常

    55110
    领券