A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安阳 中级黑马   /  2013-8-18 22:16  /  2196 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 安阳 于 2013-8-19 21:47 编辑

finally{}中的语句不管什么情况,都一定会执行吗?

5 个回复

正序浏览
  异常处理
        try{ 需要检测的代码;}
        catch(异常类  变量){ 异常处理代码;}
        finally{ 一定会执行的代码;}
        Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。

        处理过程:Try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。
        Finally里通常用来关闭资源。比如:数据库资源,IO资源等。
        finally块不能单独使用,必须始终与try块在一起

        需要注意:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。
        如果在try以外继续使用,需要在try建立引用。
        在try外对其进行初始化。IO,Socket就会遇到。
        jvm处理异常的机制采用的是默认处理机制。

        在控制显示出现异常的名称,异常错误信息,及异常的位置。
        如果一个异常是编译期间的Exception,必须处理或者继续抛出。
        如果一个异常是运行期间的RuntimeException,可以不用处理。
        针对异常能处理,就处理。否则就抛。
回复 使用道具 举报
正常情况下是一定会知道行的,假如方法有返回值的话,就算try语句块里面有return 语句,也会是执行finally中的语句,但是如果try代码块中的语句有一行System.exit(0);并且这句话之前的代码没有抛出异常执行到这句话的话,这时候JVM虚拟机就会关闭,finally中的代码就不会执行了。
回复 使用道具 举报
finally{}中的语句一定会执行的,一般是用来释放资源的,当然二楼说的一种情况是不行的,如果前面有此句代码System.exit(0);就不会执行,因为此句代码一执行java虚拟机就退出了,也就是整个程序结束了
回复 使用道具 举报
finally{}中的语句一定会执行,除了一种情况.
那就是在执行finally之前执行了System.exit(0);
System.exit(0);是退出程序,所以就不会执行了.

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
是会执行的,finally的作用在于异常后的处理,当程序出现异常的时候,程序捕捉到异常,catch代码块运行过后,会去看有没有finally,如果没有的话,就会跳出该方法,如果有的话就会执行finally。同时,不管有没有异常,finally里面的代码块都会被执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马