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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张建国 中级黑马   /  2013-4-17 17:42  /  1818 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问下边这几种情况能否编译?分别解释一下为何?求高手顺便总结一下!

情况一:

class  Demo1
{
         public  void  method()
         {
                try
                {
                       throw  new  Exception();
                }
               catch  (Exception  e)
                {

                }

         }
}



情况二:


class  Demo2
{
         public  void  method()
         {
               throw  new  Exception();
         }
}


情况三:


class  Demo1
{
         public  void  method()
         {
                try
                {
                       throw  new  Exception();
                }
               catch  (Exception  e)
                {
                         try
                         {
                                 throw  new  Exception();
                         }
                        catch  ()
                        {

                        }
               }
         }
}





评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

倒序浏览
第一种情况,记住!try{}catch()中不能抛!!!
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。

throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
李松柏 发表于 2013-4-17 18:46
第一种情况,记住!try{}catch()中不能抛!!!
throw关键字通常用在方法体中,并且抛出一个异常对象。程序 ...

额,哥们,我差点被弄晕了,表示都可以,只是第三中情况里面catch中少了Exception e;即声明捕获;
回复 使用道具 举报
Miss小强 发表于 2013-4-17 19:31
额,哥们,我差点被弄晕了,表示都可以,只是第三中情况里面catch中少了Exception e;即声明捕获; ...

第二种不行。。。忘了try  catch
回复 使用道具 举报
第一种可以:
第二种不行:抛出了没有try
第三种也不行:catch括号中没有写Exception e;

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 何锦权 于 2013-4-17 20:39 编辑

        能否编译,楼上的已经说了,

       至于为何嘛,有一个原则:当函数内容上有抛出异常对象,或者有调用了声明异常的方法
       那么要么对其进行try,catch处理(try块是放需要被检测的代码,catch块才是放处理异常的代码,所以没有catch块,那就是没有处理该异常对象),要么在函数上声明,否则编译失败,但RuntimeException除外。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
第一种情况可以编译的,因为抛出来的异常会被try……catch捕获处理掉,外部是看不见这个异常的,所以不声明抛出异常也没关系

第二种情况是不能编译的,因为这个异常是可以预见的,而且没有任何处理方法,所以会报“Unresolved compilation problem”

第三种情况,内层的catch判断框里没有写条件,也是不能编译的。但是如果把代码改成如下的样子,还是可以编译的。
  1.         public  void  method()
  2.     {
  3.            try
  4.            {
  5.                   throw  new  Exception();
  6.            }
  7.           catch  (Exception  e)
  8.            {
  9.                     try
  10.                     {
  11.                             throw  new  Exception();
  12.                     }
  13.                    catch  (Exception e2)
  14.                    {

  15.                    }
  16.           }
  17.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘兆华 于 2013-4-18 00:01 编辑

代码一可以运行。使用try catch 在函数内部解决了异常问题
代码二不能运行 抛出异常,没有在函数上声明
代码三也不能运行,也是在catch中解决了问题。但在catch中的catch没有声明异常 编译不会通过

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
第一种情况,可以,这个异常会被处理掉,外界并不知道。
第二种情况,不可以,因为方法内部抛出异常后,没有在方法上声明这个异常。
第三种情况,最里面的catch并不知道是什么异常,catch后括号黑应该有一个捕捉到的异常,如果不确定那个异常是什么就用Exception

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马