Экзамен ООП | Блок 9 Flashcards

1
Q

Что такое enum? Когда можно его применять?

A

enum - класс-перечисление, содержащий набор констант или статических объектов, каждый из которых является объектом анонимного класса.

Применяется для хранения неизменяемых значений - таких как Статус.

Может содержать:
- Поля;
- Методы;
- Конструкторы (private);

Может быть объявлен:
1. Как отдельный класс (public);
2. Как вложенный класс (public, private);
3. Как внутренний класс (private);

Наследование и интерфейсы:
1. Может имплементировать интерфейсы;
2. Не может наследовать классы и быть наследованным;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое record? Когда можно его применять?

A

Record - это неизменяемая модель данных. Record используется для быстрого создания стандартной модели данных - класса носителя данных. Добавлен в Java 14.

```Java
public record PersonRecord(String name, int age) { }
~~~

  • Поля private final name и private final age.;
  • Канонический конструктор (параметры которого - поля класса);
  • Методы equals() и hashCode();
  • Шаблонный метод toString();
  • Геттеры реализованы через методы .name() и .age();

> [!info]
Так как это неизменяемая модель данных, то у нее отсутствуют сеттеры, а все поля являются final.

  • В record можно добавлять ТОЛЬКО статические поля.
  • В record можно добавлять любые методы (статические и нестатические).
  • Record является final, поэтому наследование этого класса невозможно.
  • Record наследует java.lang.Record, поэтому не может наследовать другие классы.
  • Record может реализовывать Интерфейсы.

Для записей типа record доступен особый вид конструктора, называемый компактным конструктором. Он используется в случае, когда нам необходимо добавить в стандартный конструктор какую-то дополнительную логику (например, валидацию).

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

``` Java
public record Contact(String name, String email) {
public Contact {
if(!email.contains(“@”)) {
throw new IllegalArgumentException(“Invalid email”);
}
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое varargs? В каких случаях стоит его применять?

A

varargs или variable arguments - это механизм, который позволяет обрабатывать аргументы произвольной длины. Он обозначается тремя точками ... после объявления типа и подразумевает 0 и более передаваемых аргументов, например:

```Java
public static String text(int x, int y, String… strings) {
~~~

Все аргументы неявно помещаются в массив и передаются в метод. Если аргументов нет, то длина массива, полученного в методе, будет равна 0.
##### Особенности:
* Указать varargs можно_только_как параметр какого-либо метода;
* Параметр varargs всегда должен быть объявлен последним;
* В сигнатуре метода может объявлен только один параметр varargs;
* Методыс аргументами произвольной длины можно перегружать;

Появился в Java 5.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

В каких случаях может возникнуть неоднозначность при работе с varargs?

A

Неоднозначность может возникать в случаях перегрузки метода с аргументами переменной длины.

  1. Два метода с varargs и разными типами. Вызываем метод без аргументов.
  2. Два метода, в одном varargs, во втором первый аргумент того же типа, что и varargs. Вызываем метод с передачей одного аргумента.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое исключения? Какие типы исключительных ситуаций бывают?

A

Исключение - это ненормальное состояние, которое возникает в кодовой последовательности во время выполнения. Другими словами, исключение является ошибкой времени выполнения.

Обработка исключений в Java управляется пятью ключевыми словами:
1. try;
2. catch;
3. throw;
4. throws;
5. finally;

Все типы исключений являются подклассами встроенного класса Throwable, который делится на подклассы Error и Exception. Exception разделяется на подклассы RuntimeException и IOException.

Все подклассы Error и RuntimeException относятся к т.н. Непроверяемым исключениям. Такие исключения не обязательно включать в список throws.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly