try catch 执行原理及顺序

try{
//正常执行的代码
}catch (Exception e){
//出错后执行的代码
}finally{
//无论正常执行还是出错,之后都会执行的代码
}
//跟上面try catch无关的代码

正常执行的代码如果出现异常,就不会执行出现异常语句后面的所有正常代码。
异常可能会被捕获掉,比如上面catch声明的是捕获Exception,那么所有Exception包括子类都会被捕获,但如Error或者是Throwable但又不是Exception(Exception继承Throwable)就不会被捕获。
如果异常被捕获,就会执行catch里面的代码.如果异常没有被捕获,就会往外抛出,相当于这整个方法出现了异常。
finally中的代码只要执行进了try catch永远都会被执行.执行完finally中的代码,如果异常被捕获就会执行外面跟这个try catch无关的代码.否则就会继续往外抛出异常。

return无论在哪里,只要执行到就会返回,但唯一一点不同的是如果return在try或者catch中,即使返回了,最终finally中的代码都会被执行.这种情况最常用的是打开了某些资源后必须关闭,比如打开了一个OutputStream,那就应该在finally中关闭,这样无论有没有出现异常,都会被关闭。

之前有看到资料说,try/catch要写在循环外面,,防止出现性能的损失。不过今天看了try/catch的执行原理,结论是在没有抛出异常的情况下,性能完全没区别。

讨论帖地址:http://stackoverflow.com/questions/141560/should-try-catch-go-inside-or-outside-a-loop
异常处理帖地址:http://www.javaworld.com/javaworld/jw-01-1997/jw-01-hood.html?page=1
1、类会跟随一张 异常表(exception table),每一个try catch都会在这个表里添加行记录,每一个记录都有4个信息(try catch的开始地址,结束地址,异常的处理起始位,异常类名称)。
2、当代码在运行时抛出了异常时,首先拿着抛出位置到异常表中查找是否可以被catch(例如看位置是不是处于任何一栏中的开始和结束位置之间),如果可以则跑到异常处理的起始位置开始处理,如果没有找到则原地return,并且copy异常的引用给父调用方,接着看父调用的异常表。。。以此类推。

所以最终的结论是,要根据需求,选择合适的try/catch进行处理,满足功能。


try-catch是一种异常处理机制,可以在代码中捕获并处理可能出现的异常情况。当我们在try块中编写可能触发异常的代码时,如果异常发生了,程序会立即跳转到相应的catch块中进行异常处理。 try-catch的实现原理在不同的编程语言中可能有所不同。通常,编译器或运行时环境会在代码中的try块周围生成一段特殊的指令,用于检测可能引发的异常,并在异常发生时将控制流转移到catch块中。这些指令通常会捕获异常对象并将其传递给catch块进行处理。 具体来说,try块中的代码会按顺序执行,当某个语句引发了异常时,程序会立即跳转到与该异常类型匹配的catch块。catch块中的代码会处理异常,并在需要时进行一些特定的操作,比如输出错误信息、记录日志、恢复程序状态等。 在catch块中,可以使用异常对象来获取异常信息,并根据需要进行相应的处理。catch块通常会根据异常类型进行匹配,以便选择正确的处理代码。除了catch块外,还可以使用finally块来执行一些无论是否发生异常都需要执行的代码,比如资源释放等操作。 总之,try-catch机制是一种为了更好地处理代码中可能出现的异常情况而设计的机制。它可以帮助我们定位和解决问题,提高代码的可靠性和健壮性。不同编程语言对于try-catch的实现方式略有不同,但其基本原理是相似的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Try Catch原理讲解](https://blog.csdn.net/weixin_34764432/article/details/108567219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值