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

你真的了解 try catch finally

原文链接 https://juejin.cn/post/7291931828029358118try catch finally 执行顺序先给结论finally 语句在 try return 语句执行之后...try return 返回之前执行finally 块中 return 语句会覆盖 try 块中 return 返回如果 finally 语句中没有 return 语句覆盖返回值,那么原来返回值可能因为...中代码被复制到了 trycatch 后面,这就保证了不管是否发生异常,finally代码都会被执行;2....这个问题相信看了前面两个字节码解释之后,应该就能理解了,首先确定了执行顺序,然后再区分一下是值传递还是地址传递就能理解了其实可以把 try catch finally 理解为三个不同方法,共同操作变量相当于把这个变量以参数形式传递到这三个方法中...// 临界区代码} catch (Exception e) { // 处理异常} finally { lock.unlock(); // 释放锁}总之,在处理锁同步和释放代码中,使用 try-finally

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

try catch finally 用法

在分析此问题之前先看看它们介绍: try catch finally 是java中异常处理常用标识符,常用组合为: 1. try { //逻辑代码 }catch(exception...否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里代码不会执行 } finally { //不管什么情况都会执行,包括try catch 里面用了...return ,可以理解为只要执行了try或者catch,就一定会执行 finally } 其实这些都还好理解,主要就是finally代码执行顺序问题,这里给出我想法: 正常情况下...,先执行try里面的代码,捕获到异常后执行catch代码,最后执行finally中代码,但当在try catch中执行到return时,要判断finally代码是否执行,如果没有,应先执行finally...value of getValue(): 0 意思就是在trycatch中如果要return,会先去执行finally内容再返回。

1.3K20

C# try catch finally

前言  catchfinally 一起使用常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。...即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。如关闭数据库连接等等。...注意:如果没有catch语句块,那么finally块就是必须。   ...如果你不希望在这里处理异常,而当异常发生时提交到上层处理,但在这个地方无论发生异常,都要必须要执行一些操作,就可以使用try finally, 很典型应用就是进行数据库操作: 用下面这个原语来说明:...本地代码中栈用处非常大,不但可以用来临时保存寄存器值,还用来保存局部变量,此外还用来保存部分或全部传给函数参数,而函数返回值一般是通过EAX寄存器来传递,而不是用栈。

1.7K20

try catch finally 实现机制

try catch finally如何执行异常时跳转?finally 语句为何一定会执行?...其背后原因值得深究,我们从JVM角度看看try catch finally这个语法糖背后实现原理。...修改返回值示例.png 编译查看字节码: 修改返回值示例字节码.png 通过字节码,我们发现,在try语句return块中,return 返回变量并不是直接返回 i 值,而是在执行finally...可以看到,虽然try-catch block中i值被暂存了,但是由于finally 有return 语句,返回依然是finally 修改后i值。...finally中有return场景字节码.png 总结 第一,JVM 采用异常表方式来处理 try-catch 跳转逻辑; 第二,finally 实现采用拷贝 finally 语句块方式来实现

2.3K51

简单理解try catchtry finally

try/catch/finally 语句用于处理代码中可能出现错误信息。 错误可能是语法错误,通常是程序员造成编码错误或错别字。也可能是拼写错误或语言中缺少功能。...try语句允许我们定义在执行时进行错误测试代码块。 catch 语句允许我们定义当 try 代码块发生错误时,所执行代码块。...finally 语句在 trycatch 之后无论有无异常都会执行。 总结一下 try { //执行代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。...否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里代码不会执行 } finally { //不管什么情况都会执行...,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

1.1K20

捕获异常trycatchfinally

捕获:Java中对异常有针对性语句进行捕获,可以对出现异常进行指定方式处理 捕获异常格式: try { //需要被检测语句。...} catch(异常类 变量) { //参数。 //异常处理语句。 } finally { //一定会被执行语句。 } try:该代码块中编写可能产生异常代码。...catch:用来进行某种异常捕获,实现对捕获到异常进行处理。 finally:有一些特定代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。...而finally就是解决这个问题,在finally代码块中存放代码都是一定会被执行。...代码演示 public class Main { public static void main(String[] args) { try { devision

1.2K20

你真的了解try catch finally?(面试题)

一、说明 try catch finally在面试中也是经常遇到,我现在还是大三嘛,前几天通过学长内推了阿里一个实习生职位。昨天预面试了,是一位很好一位哥哥,听起来声音也很好听,应该也很年轻。...聊也很愉快。 突然聊到了“try catch finally”,那我就把过程通过大白话来写一下吧,并加上一些分析。...二、捕获异常与抛出异常区别 try是可能抛出异常语句; catch是用来捕获异常; 一个方法如果完全有能力自己处理发生错误就可以自己处理,如果处理不了这个错误,就可以用throw重新抛出...四、处理异常技巧 Java异常处理原则和技巧 1、避免过大try块,不要把不会出现异常代码放到try块里面,尽量保持一个try块对应一个或多个异常。...4、不要把自己能处理异常抛给别人。 5、不要用trycatch参与控制程序流程,异常控制根本目的是处理程序非正常情况。

65420

PHP中trycatchfinally 用法总结

前言 在开发过程中异常处理是经常用到,相信大部分使用 trycatchfinally 只知道 try 中出现异常 catch 中会捕获,finally 块中代码何时都会执行。...catch 捕获异常并抛出,若 catch 中出现异常则跳转到 finallytrycatch 正常执行若存在 return 则先执行 return 代码并保存返回值信息再执行 finally...,若 finally 中出现异常或包含 return 则执行结束,若无异常且没有 return 则会执行 trycatch return 或结束。...如果 catch 里面有 return 或者 try 里面有 return,finally 里面有 return,非 finally 代码段 return 后面的代码是不执行,但是 finally...而且 finally 可以跨越 return 存在,也就是说即使在 catch 或者 try 代码块中使用 return ,finally 还是会执行,这样就使得实现相同效果代码量更加少。

1.1K30

Java 异常 总结 try catch finally Exception

(); } 捕获异常2、 try{ 可能发生异常代码 }catch(发生异常){ 捕捉异常后执行语句 }finally{ 不管是否发生异常都要执行语句 } // try...("finally") } 注意 当发生异常时,在try代码块中异常语句后面的语句不会再执行 trycatchfinally以及trycatchfinally之外代码是互相独立,在try...中定义变量在其他部分无法访问,改变了仅作用于try部分,其他catchfinally情况类似,但是外部定义变量在trycatchfinally中可以使用 在进行异常捕获时候,return...; System.out.println("after return");// 这条语句ide直接报错,相当于多余 // 故return语句只能有一下几种情况 //1 try{...//其他catchfinally中都不能再存在return语句了 2.trycatchfinally后面没有代码情况 //第一种情况 try{ System.out.println

30510

通过字节码理解try-catch-finally

通过字节码理解try-catch-finally 场景 对于以下代码: public int test() { int x; try { x = 1; return x; } catch (Exception...结论 如果try语句没有出现属于Exception或其子类异常,返回值为1 如果出现,返回值为2 如果出现Exception以外其它异常,则没有返回,方法异常退出 解释 通过javap获取字节码如下...编译器自动在每段可能分支路径之后都将finally语句块内容冗余生成一遍来实现finally语义。同样还有第13、14行,第19、20行。...从异常表中还可以发现另一问题,在catch块中如果出现了异常(第8到12行),那么也会跳到第17行进行处理,也就是执行finally代码块。...注:对于x=1;这条语句,虽然在字节码中体现为iconst和istore两条字节码,但是他们依然是原子操作,原子操作不是说只有一条指令,而是不可中断一个或一系列操作。

30320

关于try catch finally一些小细则

细则: 1.try块是必须catch块和finally块都是可选,但必须存在一个或都存在。try块不能单独存在。...2.try块里语句运行中出现异常会跳过try块里其他语句,直接运行catch语句。 3.无论try块中是否有异常,无论catch块中语句是否实现,都会执行finally块里语句。...4.如果try块或catch块中有return语句,finally块里语句会执行在try块或catch块中return语句前。...5.如果finally块里有return语句,则直接返回,而不执行try块或catch块里return语句。...6.只有一种办法不执行finally块里语句,那就是调用System.exit(1);方法,即退出java虚拟机。 强调:finally块里语句在trycatch里的人return前执行!!!

44520

如何使用 try-with-resources 代替try-catch-finally

它可以代替传统 try-catch-finally 结构来处理资源释放。 2. 为什么需要使用 try-with-resources?...在传统 try-catch-finally 结构中,我们需要手动关闭打开资源,比如文件、数据库连接等。这样容易出现遗漏或错误关闭资源情况,导致资源泄露和程序异常。...3. try-with-resources 实现原理 当使用 try-with-resources 时,编译器会生成一个隐式 finally 块来关闭资源。...可以在 try 后面的括号内声明多个资源对象,用分号隔开。 可以在 try-catch-finally 结构中嵌套使用 try-with-resources。 8....总结 try-with-resources 是一种简化资源管理语法结构,它可以代替传统 try-catch-finally 结构来处理资源释放。

48040

​Java中关于trycatchfinally细节分析

前言 阿里巴巴开发手册中有这么一条:【强制】不要在 finally 块中使用 return , 在开发过程中发现部分同学对这条规则理解不是很透彻,本文将就 trycatchfinally 一些问题...,分析一下 trycatchfinally 处理流程。...,也就是t="finally" 第11-12行,把第二个变量对应值返回 通过字节码,我们发现,在 try 语句 return 块中,return 返回引用变量( t 是引用类型)并不是try语句外定义引用变量...t,而是系统重新定义了一个局部引用 t ’,这个引用指向了引用 t 对应值,也就是 "try" ,即使在 finally 语句中把引用 t 指向了值 "finally" ,因为 return 返回引用已经不是...NPE 异常,而不是 java.lang.NumberFormatException异常,所以不会进入 catch 语句块,直接进入 finally 语句块,finally 对 t 赋值之后,由 try

99060

Java异常处理try-catch-finally执行过程

参考链接: Java异常处理中finally try-catch-finally程序块执行流程以及执行结果比较复杂。基本执行过程如下:  程序首先执行可能发生异常try语句块。...如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生异常类型跳至相应catch语句块执行处理。...catch语句块可以有多个,分别捕获不同类型异常。catch语句块执行完后程序会继续执行finally语句块。...finally语句是可选,如果有的话,则不管是否发生异常,finally语句都会被执行。  需要注意是即使trycatch块中存在return语句,finally语句也会执行。...是在执行完finally语句后再通过return退出。

96320

java异常处理机制(try-catch-finally)

]; * Exception错误时程序员要解决问题,例如指针越界,零做除数 * 2.异常处理 * try{ * 需要检测是否发生异常代码 * } * catch(Exception...5 c=div(a,b);//有可能出错代码,放在try中进行检测 6 }catch(Exception e){ 7 //自己定义输出内容...throws Exception来声明可能会抛出异常,提高程序安全性 22 //调用该方法地方必须要try-catch语句,否则编译错误 23 public static int div...(int a,int b)throws Exception{ 24 return a/b; 25 } 26 } /* * tryfinally代码块是肯定会执行 *...Exception来声明可能会抛出异常,提高程序安全性 18 //调用该方法地方必须要try-catch语句,否则编译错误 19 public static int div (int

58020
领券