黑马程序员技术交流社区

标题: 关于异常的小问题!!! [打印本页]

作者: 张建国    时间: 2013-4-17 17:42
标题: 关于异常的小问题!!!
请问下边这几种情况能否编译?分别解释一下为何?求高手顺便总结一下!

情况一:

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  ()
                        {

                        }
               }
         }
}






作者: 爪哇攻城狮    时间: 2013-4-17 18:46
第一种情况,记住!try{}catch()中不能抛!!!
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。

throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。
作者: Miss小强    时间: 2013-4-17 19:31
李松柏 发表于 2013-4-17 18:46
第一种情况,记住!try{}catch()中不能抛!!!
throw关键字通常用在方法体中,并且抛出一个异常对象。程序 ...

额,哥们,我差点被弄晕了,表示都可以,只是第三中情况里面catch中少了Exception e;即声明捕获;
作者: Miss小强    时间: 2013-4-17 19:32
Miss小强 发表于 2013-4-17 19:31
额,哥们,我差点被弄晕了,表示都可以,只是第三中情况里面catch中少了Exception e;即声明捕获; ...

第二种不行。。。忘了try  catch
作者: Miss小强    时间: 2013-4-17 19:33
第一种可以:
第二种不行:抛出了没有try
第三种也不行:catch括号中没有写Exception e;
作者: 何锦权    时间: 2013-4-17 20:14
本帖最后由 何锦权 于 2013-4-17 20:39 编辑

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

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

作者: PANZERLEADER    时间: 2013-4-17 21:57
第一种情况可以编译的,因为抛出来的异常会被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.     }
复制代码

作者: 刘兆华    时间: 2013-4-17 23:58
本帖最后由 刘兆华 于 2013-4-18 00:01 编辑

代码一可以运行。使用try catch 在函数内部解决了异常问题
代码二不能运行 抛出异常,没有在函数上声明
代码三也不能运行,也是在catch中解决了问题。但在catch中的catch没有声明异常 编译不会通过
作者: 16463535    时间: 2013-4-18 18:40
第一种情况,可以,这个异常会被处理掉,外界并不知道。
第二种情况,不可以,因为方法内部抛出异常后,没有在方法上声明这个异常。
第三种情况,最里面的catch并不知道是什么异常,catch后括号黑应该有一个捕捉到的异常,如果不确定那个异常是什么就用Exception




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2