Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст к презентации Обработка исключений.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
211 Кб
Скачать
☆

2. Не мелочитесь!

Многие программисты каждый оператор помещают в отдельный блок try .

OutputStream out;

Stack s;

for (i = 0; i < 100; i++)

{

try

{

n = s.pop();

}

catch (EmptyStackException s)

{

// Стек пуст,

}

try

{

out.writeInt(n);

}

catch (IOException e)

{

// Проблемы при записи данных в файл.

}

}

При таком подходе размер вашей программы стремительно увеличивается. Подумайте о задаче, которую должна решать ваша программа. В данном случае мы хотим вытолкнуть из стека 100 чисел и записать их в файл. (Неважно как — это всего лишь пример.) Само по себе возбуждение исключительной ситуации не решает проблем. Если стек пуст, он не заполнится по мановению волшебной палочки. Если при записи в файл возникает ошибка, она не исчезнет сама собой. Следовательно, имеет смысл поместить в блок try весь фрагмент программы. Если хотя бы одна из операций даст сбой, можно отказаться от решения всей задачи.

try

{

for (i = 0; i < 100; i++)

{

n = s.pop ();

out.writeInt(n);

}

}

catch(IOException e)

{

// Проблемы при записи данных в файл,

}

catch(EmptySTackException e)

{

// Стек пуст.

}

Этот фрагмент намного яснее. Он выполняет одно из своих основных заданий — отделяет нормальную работу программы от обработки исключительных ситуаций.

3. Не заглушайте исключительные ситуации!

В языке Java существует большой соблазн заглушить исключительные ситуации. Допустим, вы пишете метод, вызывающий другой метод, который может возбудить исключительную ситуацию один раз в сто лет. Компилятор пожалуется на это, поскольку вы не объявили эту исключительную ситуацию в списке throws вашего метода. Предположим, вам не хочется указывать ее в списке throws, так как компилятор начнет жаловаться на все методы, вызывающие ваш метод. В этом случае исключительную ситуацию можно просто заглушить.

public Image loadImage(String s)

{

try

{

Код, способный сгенерировать исключение.

}

catch (Exception e)

{} // Действия не выполняются!

}

Теперь ваш код будет скомпилирован. Он будет прекрасно работать, но не в исключительной ситуации. Если она возникнет, то будет молча проигнорирована. Если вы считаете, что эта исключительная ситуация важна, приложите усилия для ее обработки.

4. Не стыдитесь передавать исключительные ситуации другим обработчикам!

Некоторые программисты считают себя обязанными перехватывать все исключительные ситуации, которые они возбуждают. Вызывая метод, возбуждающий некоторую исключительную ситуацию, например, конструктор класса FileInputStream или метод readLine, они инстинктивно перехватывают исключительные ситуации, которые могут быть сгенерированы ими. Зачастую оказывается предпочтительнее передать исключительную ситуацию другому обработчику, а не обрабатывать ее самому. Методы более высокого уровня лучше информируют пользователя об ошибке.

18