2

我猜这三部分代码没有区别,不是吗?

   try
    {
       // .............
    }
    catch
    {
        // ............. 
    }

   try
    {
       // .............
    }
    catch(Exception)
    {
       // .............  
    }

try
{
   // .............
}
catch(Exception e)
{
    // ............. 
}

但是,我几乎很清楚何时应该使用第一个以及何时使用第二个。但我想让你说出你的想法。

4

4 回答 4

14

第一个还将捕获不是异常的抛出对象。
这可能发生在不符合 CLS 的代码中

如果您实际上不使用异常变量,第二个不会给出编译器警告。

只有当您确实需要检查抛出的异常(例如,记录它)时,才应使用第三个。

于 2012-09-09T06:16:37.540 回答
4

这些代码有点不同

第一个不允许您从发生的异常中获取任何信息。它会捕捉到任何东西,但你不会知道捕捉到了什么。

第二个不允许你做任何事情,但至少可以让你指定什么样的异常。在您的示例中,由于您已指示Exception,它将捕获源自 的所有内容Exception。但它可以被改变以微调捕获的内容 - 但仍然允许你对它不做任何事情。

第三个让您实际访问异常并从中获取信息。

于 2012-09-09T06:16:53.677 回答
1

第三种情况实际上是这样的:

当 try 块中的某一行发生异常时,会创建一个对应异常的对象。包含的 catch 块(Exception e)实际上有一个Exception类变量e作为其参数。然后将异常对象的引用复制到此引用变量。您现在可以根据需要使用此 e 变量来识别引发的异常类型,例如e.message()给出与异常相关的描述。

Slaks已经很好地解释了第一种和第二种情况

于 2012-09-09T06:25:43.453 回答
-1

这取决于。不知道前两者有什么区别。

如果您想在 catch 块中使用异常,即获取堆栈跟踪或其他信息,则必须使用最后一个,这样您就有一个对象可以引用。

如果您只是将异常抛出给其他人处理,则不需要它。

于 2012-09-09T06:16:25.430 回答