Java try块的范围应该尽可能紧密吗?
有人告诉我,使用Java try-catch机制有一些开销。因此,虽然有必要将引发已检验异常的方法放在 try 块中以处理可能的异常,但从性能角度来看,最好将 try 块的大小限制为仅包含那些可能引发异常的操作。
我不太确定这是一个明智的结论。
考虑下面处理指定文本文件的函数的两个实现。
即使第一个确实会产生一些不必要的开销,我发现它更容易遵循。仅仅通过查看声明就不太清楚例外究竟来自哪里,但注释清楚地表明了哪些声明是负责任的。
第二个比第一个更长,更复杂。特别是,第一个漂亮的行读习语必须被修改,以将呼叫放入尝试块中。readLine
在可能在其定义中引发多个异常的功能中处理异常的最佳实践是什么?
这个包含 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);
}
}
这个只包含尝试块中引发异常的方法:
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);
}
}