先说结论,会!try..catch..finally结构,其执行顺序是先执行try结构体的内容,此时如果try中代码出现异常,那么会执行到catch代码块中进行异常的处理,最后不管有无异常都会执行finally代码块执行一个保底的操作。具体,我们可以看下面的一块代码:我们可以看到,代码执行到13行时,1/0会抛出异常,进入catch代码块中...
不管try有没有return,finally都会执行 在try中return,在finally执行前会把结果保存起来,即使在finally中有修改,也以try中保存的值为准,但是如果是引用类型,修改的属性会以finally修改后的为准。 如果try/finally中都有return,直接返回finally中的return。
就是说try不能单独使用,要结合finally使用,就像上面所说的完成try的陈述;这里我们就是将可能出现异常的程序块包裹起来抛给我们的程序,没有异常就正常执行,有异常我们将异常给封装好抛给程序,然后我们就紧接着使用catch来抓取这个异常,我们定义一个异常对象来与之比较,如果是那个异常,那就执行catch里面的语句; package...
通过实际试验,我们可以看到,finally 确实执行了,而且 return 语句也生效了,foo() 返回了结果 0。虽然 return 执行了,但是函数并没有立即返回,又执行了 finally 里面的内容,这样的行为违背了很多人的直觉。 如果在这个例子中,我们在 finally 中加入 return 语句,会发生什么呢? functionfoo(){try{return0; }catch...
try中有return, 会先将值暂存,无论finally语句中对该值做什么处理,最终返回的都是try语句中的暂存值。 当try与finally语句中均有return语句,会忽略try中return。 实例: 当程序执行try{}遇到return时,程序会先执行return语句,但不会立即返回。 即将return语句要做的一切事情都准备好,在将要返回、但并未返回的时候...
} finally { return 1; } } console.log(foo()); 通过实际执行,我们看到,finally 中的 return “覆盖”了 try 中的 return。在一个函数中执行了两次 return,这已经超出了很多人的常识,也是其它语言中不会出现的一种行为。 面对如此怪异的行为,我们当然可以把它作为一个孤立的知识去记忆,但是实际上,这背后有...
functionfoo(){try{return0;}catch(err){}finally{console.log("a")}}console.log(foo()); 通过实际试验,我们可以看到,finally 确实执行了,而且 return 语句也生效了,foo() 返回了结果 0。 虽然return 执行了,但是函数并没有立即返回,又执行了 finally 里面的内容,这样的行为违背了很多人的直觉。
执行的结果是:ff() finally 他们的执行程序是:先执行ff()方法,然后当遇到try{}里面的return时,程序就自动执行finally{}然后在return。 所以说finally{}既可以说是在return之前执行也可以说是在执行return的中间执行。 如果 packagecom.test;publicclassTryAndFinally {publicString ff(){ ...
try-catch里面加了return后,finally还会执行吗? 请看下面的方法,在我们的catch里面,捕获到了异常之后,我们的catch模块里面的语句,还会接着执行,当我们执行到return之后,我们不会立即返回,而是会接着执行finally块里面的代码,只有执行完,才会继续执行我们的return值,...