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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 壁虎 中级黑马   /  2013-3-26 00:04  /  2948 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. public class Test{
  3.             public static void main(String[] args){
  4.             try{
  5.                 System.out.println(5/0);
  6.             }catch(Exception e){
  7.                   throw new RuntimeException("catch..");
  8.             }finally{
  9.                  throw new RuntimeException("finally..");
  10.            }
  11.        }
  12. }
复制代码
这样的代码 最后打印的是finally..   请问catch代码块中的代码会执行吗?

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 07:11

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
catch代码块会执行啊   它就是为了处理try里发生的异常的 !可以这样验证:
在catch(Exception e){
             System.out.println("1");  //会打印出 1,说明执行了
              throw new RuntimeException("catch..");

        }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼主这题有点意思!!想问为什么抛了Runtime异常,程序应该停止了!为什么还要执行一定会执行的finally代码块是吧!!!finally代码块不执行的条件是jvm退出!或是调用exit方法退出!!这样就明白了吧!!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你能打印出来嘛?
throw肯定打印不出来,try里代码有异常,你catch进行捕获,但你又没处理又抛出了
你抛出后没人接收它,肯定出错,不管这个,finally是肯定会执行的
但你finally里抛出异常也没人接收,会先报finally的错。。。。
如果你把 throw new RuntimeException("finally..");注释掉就会报 throw new RuntimeException("catch..");的错

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
catch代码块用于捕捉相对应的异常,而本题中的异常时Exception,所以会被catch块捕捉到,finally代码块是一定会被执行的,所以会打印出finally.基于finally的这些特性,所以finanlly代码块一般用于关闭IO资源。
回复 使用道具 举报
try{

05.                System.out.println(5/0);

06.            }catch(Exception e){

07.                  throw new RuntimeException("catch..");
你写的程序出现异常了,肯定会执行catch代码块中的代码的。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
当try块中出现异常后被catch块捕捉到就执行catch块,如果catch块中又出现异常了 但是又没有try来捕捉 那就把当前的异常交与jvm来处理 然后就直接打印出来异常信息了 不会往下执行了
回复 使用道具 举报
import java.io.*;
public class Test{
            public static void main(String[] args){
            try{
                System.out.println(5/0);
            }catch(Exception e){
                  throw new RuntimeException("catch..");
            }finally{
                 throw new RuntimeException("finally..");
           }
       }
}
catch和finally语句块都会被执行。因为5/0时触发了ArithmeticException异常,而语句中有catch代码块,程序就会去执行catch代码块中的语句。而finally语句是无论是否触发异常,都会执行的语句,所以,不管你try语句中写的是5/0,过上5/1,无论是否发生异常,finally语句都会被执行。
RuntimeException与一般的异常没有太大的区别,只是方法在抛出RuntimeException时不用在函数中throws声明,这样做是为了让用户调用程序时就能明显的看到异常,让程序中止,对代码进行调整。
个人认为Runtime异常和Error很相似,都是调用者无法处理需要更改代码的书法家,只不过Error比RuntimeException更加的严重。
回复 使用道具 举报
壁虎 中级黑马 2013-3-26 14:33:36
9#
本帖最后由 tuo1254 于 2013-3-26 18:45 编辑

个人认为 catch块中的代码会执行,但是如果catch代码块中 只有throw new RuntimeException("catch..");这么一句代码,则不会执行,因为finally代码块的特性无论如何都会执行,除非你关掉java虚拟机,执行顺序是try--catch--finally--如果遇到throw 和 return 关键字,会先执行finally代码块的内容。然后回去执行rhrow 或者 return 代码。但是finally代码块却抛了运行的异常,程序停止,所以打印的是finally..
回复 使用道具 举报
finally里面的无论是否捕获异常都会执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马