有人告诉我,使用 Java 的 try-catch 机制会产生一些开销。因此,虽然有必要将抛出已检查异常的方法放在 try 块中以处理可能的异常,但在性能方面最好限制 try 块的大小以仅包含可能抛出异常的那些操作。
我不太确定这是一个明智的结论。
考虑以下两个处理指定文本文件的函数的实现。
即使第一个确实会产生一些不必要的开销,我发现它更容易理解。仅通过查看语句就不太清楚异常究竟来自何处,但评论清楚地表明了哪些语句是负责任的。
第二个比第一个更长更复杂。特别是,第一个漂亮的行阅读习惯必须被破坏以使readLine
调用适合 try 块。
在定义中可能引发多个异常的函数中处理异常的最佳实践是什么?
这一个包含 try 块中的所有处理代码:
void processFile(File f)
{
try
{
// construction of FileReader can throw FileNotFoundException
BufferedReader in = new BufferedReader(new FileReader(f));
// call of readLine can throw IOException
String line;
while ((line = in.readLine()) != null)
{
process(line);
}
}
catch (FileNotFoundException ex)
{
handle(ex);
}
catch (IOException ex)
{
handle(ex);
}
}
这个仅包含在 try 块中引发异常的方法:
void processFile(File f)
{
FileReader reader;
try
{
reader = new FileReader(f);
}
catch (FileNotFoundException ex)
{
handle(ex);
return;
}
BufferedReader in = new BufferedReader(reader);
String line;
while (true)
{
try
{
line = in.readLine();
}
catch (IOException ex)
{
handle(ex);
break;
}
if (line == null)
{
break;
}
process(line);
}
}