Мне сказали, что есть некоторые накладные расходы при использовании механизма try-catch Java. Таким образом, хотя необходимо поместить методы, которые выставляют проверенное исключение в блоке try для обработки возможного исключения, хорошей практикой является ограничить размер блока try только теми операциями, которые могут генерировать исключения.
Я не уверен, что это разумный вывод.
Рассмотрим две реализации ниже функции, обрабатывающей указанный текстовый файл.
Даже если это правда, что первый несет некоторые ненужные накладные расходы, мне гораздо легче следовать. Менее ясно, где именно исключения исходят только от взглядов на высказывания, но в комментариях четко указывается, какие заявления ответственны.
Второй - намного длиннее и сложнее первого. В частности, хорошая идиома первого чтения первой должна быть искажена, чтобы соответствовать вызову readLine
в блок try.
Какова наилучшая практика для обработки исключений в funcion, где в его определении могут быть выбраны несколько исключений?
Этот код содержит весь код обработки в блоке 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);
}
}