我听说使用Java的try-catch机制有一定的开销。因此,虽然需要将抛出已检查异常的方法放在try块中以处理可能的异常,但从性能的角度来看,最好限制try块的大小,只包含可能引发异常的那些操作。
我不确定这是否是一个明智的结论。
考虑下面两个实现文件处理函数的示例。
即使第一个实现确实产生了一些不必要的开销,但我认为它更易于理解。仅从语句中看不清楚异常的确切来源,但注释清楚地显示哪些语句是有问题的。
第二个比第一个要长得多且复杂。特别是,第一个的良好行读取方式必须改整以适应readLine调用的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);
}
}