
Лабораторная работа 5 ОБРАБОТКА ИСКЛЮЧЕНИЙ
Цель лабораторной работы
Освоить механизмы обработки исключений в Java.
Задание на лабораторную работу
В лабораторной работе требуется добавить к классам, написанным в лабораторной работе №4 обработку исключений. Напишите собственный класс исключения InvalidOperationException, являющийся наследником класса Exception. Это исключение должно генерироваться следующими методами:
методом enqueue очереди при попытке добавления элемента в переполненную очередь
методами peek и dequeue очереди, если она пуста
методом push стека при попытке добавления элемента в переполненный стек
методами peek и pop стека, если он пуст.
Исключение должно быть корректно обработано в вызывающем коде. При этом должно быть выведено сообщение о причине возникновения исключения.
Указания к выполнению лабораторной работы
В языке Java существует механизм обработки ошибок с помощью исключений. Исключение представляет собой класс, содержащий в иерархии наследования класс Throwable. Исключения, унаследованные от класса Exception и не являющиеся наследниками класса RuntimeException, являются проверяемыми. Это означает, что для успешной компиляции программы необходимо, чтобы методы, внутри которых может произойти такое исключение, обрабатывали его либо оно должно быть объявлено в их сигнатуре.
Объявим класс исключения StackUnderflowException, которое должно сигнализировать о том, что стек пуст, и из него невозможно извлечь ни одного элемента.
public class StackUnderflowException extends Exception {
public StackUnderflowException(String message) { super(message);
}
}
Конструктор данного класса принимает в качестве параметра сообщение и передаѐт его конструктору класса Exception. Это сообщение впоследствии можно получить с помощью метода getMessage().
В случае, если при выполнении метода peek() может возникнуть проверяемое исключение StackUnderflowException, оно должно быть объявлено в его сигнатуре после ключевого слова throws.
public int peek() throws StackUnderflowException { if (isEmpty()) {
throw new StackUnderflowException( "Stack is empty");
}else {
return data[top];
}
}
После этого метод, вызывающий peek, должен либо передавать это исключение наверх, также объявляя это исключение в своей сигнатуре после ключевого слова throws, либо обрабатывать это исключение в блоке try-catch. try {
a = stack.peek();
} catch (StackUnderflowException e) { System.out.println(e.getMessage());
}
Результат выполнения лабораторной работы
В результате выполнения лабораторной работы должны быть написаны следующие классы:
InvalidOperationException – класс исключения.
Код, использующий стек и очередь, корректно обрабатывающий возникающие исключения.