拿这段代码:
try
{
FileReader f=new FileReader("D:/sda.t");
}catch(FileNotFoundException e)
{
e.printStackTrace();
}catch(Exception f)
{
f.printStackTrace();
}
答案 0 :(得分:1)
为什么我们采用这种方法? 为什么我们不仅仅使用异常异议来捕获所有异常而不是针对特定异常?
很简单,如果您想在发生特定异常时执行特定任务,请执行此操作。
答案 1 :(得分:1)
正如其他人所说,抓住所有Exception
是一个坏主意,因为通常你想以不同方式处理它们。
虽然你还需要注意捕捉Exception
也会捕获所有RuntimException
,你通常会 想要抓住它们。其中包括NullPointerException
。
如果你没有抓住RuntimeException
s,那么一旦程序到达一个程序就会死亡,如果你抓住Exception
并忘记处理显示异常的任何内容,你会收到通知。然后你会错过RuntimeException
s,它表示程序员错误。
答案 2 :(得分:0)
如果您对异常执行的唯一操作是printStackTrace(),那么就没有/只有一点。关键是不同的处理代码可以与不同的异常相关联,并且将抛出的异常与捕获列表匹配是按照指定的顺序完成的(使用第一个匹配的选择机制)。
答案 3 :(得分:0)
在java7或更新版本中,您可以使用multicatch语句:
catch(SQLException | IOException e) {
logger.log(e);
}
答案 4 :(得分:0)
因为如果您确实希望发生特定的异常,您将以不同的方式处理它。例如,您可能希望在获得FileNotFoundException
时创建文件。
如果您按照您提供的示例进行广泛缩小,那么FileNotFoundException
将永远不会被捕获,因为首先使用更宽的Exception
。如此广泛的缩小是无用的。
答案 5 :(得分:0)
3个理由:
查看docs和this answer。