我猜这三部分代码没有区别,不是吗?
try
{
// .............
}
catch
{
// .............
}
和
try
{
// .............
}
catch(Exception)
{
// .............
}
和
try
{
// .............
}
catch(Exception e)
{
// .............
}
然而,当我应该使用第一个和第二个时,我几乎是精明的。但我希望你能说出你的想法。
答案 0 :(得分:14)
第一个也将捕获不是例外的抛出物体 (this can happen from non-CLS-compliant code)
如果您实际上没有使用异常变量,则第二个不会给出编译器警告。
只有在您确实需要检查抛出的异常(例如,记录它)时才应使用第三个。
答案 1 :(得分:4)
那些代码相当有点不同。
第一个不允许您从发生的异常中获取任何信息。它会抓住任何东西,但你不会有任何线索被捕获的。
第二个不允许你做任何事情,但至少让你指定什么样的例外。在您的示例中,由于您已指出Exception
,因此它将捕获从Exception
派生的所有内容。但它可能会被改变以微调被捕获的东西 - 但仍然允许你不做任何事情。
第三个允许您实际访问异常并从中获取信息。
答案 2 :(得分:1)
第三种情况实际上就是这样:
当try块中的一行发生异常时,会创建一个对应异常的对象。包含(Exception e)
的catch块实际上具有Exception
类变量e
作为其参数。然后将异常对象的引用复制到此引用变量。您现在可以根据需要使用此e变量来识别引发的异常类型,例如e.message()
给出与异常相关的描述。
Slaks
很好地解释了第一个和第二个案例答案 3 :(得分:-1)
这取决于。我不知道前两者之间的区别。
如果要在catch块中使用异常,即获取堆栈跟踪或其他信息,则必须使用最后一个,以便有一个对象可供引用。
如果您只是为其他人处理异常,则不需要它。