黑马程序员技术交流社区
标题:
关于finally{}的问题
[打印本页]
作者:
安阳
时间:
2013-8-18 22:16
标题:
关于finally{}的问题
本帖最后由 安阳 于 2013-8-19 21:47 编辑
finally{}中的语句不管什么情况,都一定会执行吗?
作者:
gulup
时间:
2013-8-18 23:28
是会执行的,finally的作用在于异常后的处理,当程序出现异常的时候,程序捕捉到异常,catch代码块运行过后,会去看有没有finally,如果没有的话,就会跳出该方法,如果有的话就会执行finally。同时,不管有没有异常,finally里面的代码块都会被执行
作者:
☆今☆
时间:
2013-8-19 00:18
finally{}中的语句一定会执行,除了一种情况.
那就是在执行finally之前执行了System.exit(0);
System.exit(0);是退出程序,所以就不会执行了.
作者:
依旧
时间:
2013-8-19 01:18
finally{}中的语句一定会执行的,一般是用来释放资源的,当然二楼说的一种情况是不行的,如果前面有此句代码System.exit(0);就不会执行,因为此句代码一执行java虚拟机就退出了,也就是整个程序结束了
作者:
judyfun
时间:
2013-8-19 19:07
正常情况下是一定会知道行的,假如方法有返回值的话,就算try语句块里面有return 语句,也会是执行finally中的语句,但是如果try代码块中的语句有一行System.exit(0);并且这句话之前的代码没有抛出异常执行到这句话的话,这时候JVM虚拟机就会关闭,finally中的代码就不会执行了。
作者:
sunriselzz
时间:
2013-8-19 21:31
异常处理
try{ 需要检测的代码;}
catch(异常类 变量){ 异常处理代码;}
finally{ 一定会执行的代码;}
Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。
处理过程:Try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。
Finally里通常用来关闭资源。比如:数据库资源,IO资源等。
finally块不能单独使用,必须始终与try块在一起
需要注意:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。
如果在try以外继续使用,需要在try建立引用。
在try外对其进行初始化。IO,Socket就会遇到。
jvm处理异常的机制采用的是默认处理机制。
在控制显示出现异常的名称,异常错误信息,及异常的位置。
如果一个异常是编译期间的Exception,必须处理或者继续抛出。
如果一个异常是运行期间的RuntimeException,可以不用处理。
针对异常能处理,就处理。否则就抛。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2