Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП зачет.docx
Скачиваний:
89
Добавлен:
01.04.2022
Размер:
3.08 Mб
Скачать

Вопрос 16. Интерфейсы Comparable, Comparator. Назначение, примеры

Для реализации задания порядка существуют 2 интерфейса:

Comparable предназначен для определения естественного порядка, определенном в пакете java.lang. Данный интерфейс имеет 1 метод: compareTo(Object obj) - сравнивает один объект с другим.

Пример:

public class A implements Comparable {

String name;

public int compareTo(Object obj) {

return name.compareTo(((A)obj).name;

}

}

Недостаток данного интерфейса - можно задать только 1 порядок.

Comparator предназначен для упорядочения набора данных. Он содержит описание 2 методов:

  1. public int compare (Object obj1, Object obj2)

  2. public boolean equals(Object obj) - используется для сравнения самих компараторов, его не нужно определять.

Пример:

Вопрос 17. Обработка исключений. Поведение программы при возникновении исключения. Структура и использование блока перехвата исключений.

Когда возникает исключение? - Порождается объект, который связан с этим исключением, соответственно, этот объект является объектом некоторого класса исключительных ситуаций. Каждая исключительная ситуация имеет своё имя, и это имя - имя класса, в котором хранится вся информация об этом исключении.

Используя методы, которые есть в классах исключений, мы можем вывести информацию о том, какая исключительная ситуация возникла. Аппарат исключений является средством обработки ошибок, то есть с его помощью мы можем систематизировать и упростить обработку ошибок, но исключения не стоит применять для того, чтобы каким-либо образом построить логику программы. То есть не следует генерировать какое-либо исключение, допустим, при событии нажатия на клавишу или клик мыши, такие события нужно обрабатывать программно, без генерации исключения. Исключения нужны для того, чтобы не завершать в некоторых ситуациях аварийную работу приложения, а просто вывести предупреждение или ошибку и продолжить работу.

Существует 2 вида генерации исключения:

  1. Автоматическая генерация - происходит тогда, когда JVM обнаруживает некоторую ошибку, например деление на ноль или приведение типов данных, и соответственно, сама машина генерирует это исключение;

  2. Явная программная генерация - т.е. в коде самостоятельно можете выбросить исключение при помощи ключевого слова throw, т.е. при его использовании создаём новый объект, допустим:

throw new IllegalArgumentException(“Список параметров неверный”);

То есть по названию исключения понятно, что ошибка в параметрах, и мы можем в качестве параметра, когда создаём объект, передать какое-либо текстовое сообщение. При генерации исключения мы порождаем объект класса нужной нам исключительной ситуации.

Поведение программы при появлении исключения

И при автоматической, и при программной генерации исключения выполнение текущего потока команд программы прекращается. Например, если поставить оператор сразу после оператора throw, то такой оператор не выполнится.

Но исключения можно перехватить. Перехват осуществляет при помощи try-catch блока, но если не предпринять никаких действий по перехвату исключения, то выполнение текущего потока команд прекратится, и будет выдано системное сообщение на консоль.

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

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