Что будет в результате вызова метода?
Anonymous Quiz
13%
Исключение при сохранении, но данные первой записи останутся
3%
Исключение при сохранении, но данные второй записи останутся
4%
Исключение при сохранении, но данные обеих записей останутся
5%
Spring игнорирует исключение, данные обеих записей останутся
75%
Откат транзакции, ничего не сохранено
👍7🔥3
Что будет результатом этого кода?
Anonymous Quiz
2%
Программа выведет значения в одном потоке. Только Thread-1 выполнит задачу
9%
Программа выведет значения по очереди. Сначала выполнится Thread-1, затем Thread-2
75%
Результат будет перемешан. Оба потока работают параллельно, порядок вывода строк не гарантируется
3%
Программа выбросит исключение. Использование Runnable без синхронизации вызовет ошибку
11%
Программа не выведет ничего. Потоки завершатся до выполнения задач.
🔥7👍6
К каким полям можно получить доступ из другого пакета?
Anonymous Quiz
1%
privateField
5%
defaultField, protectedField
50%
publicField
3%
Все поля будут недоступны
41%
protectedField, publicField
👍7😐4🔥2❤1🤔1
Почему возможна ошибка во время выполнения кода?
Anonymous Quiz
10%
Метод equals вызывается от null
5%
Поле id не инициализировано
52%
Нет проверки, является ли obj экземпляром BadEquals
4%
Метод equals HE synchronized
29%
Проблема с доступом к полю id
👍5🔥3
Какой из методов Stream возвращает один элемент в результате выполнения?
Anonymous Quiz
6%
filter()
8%
forEach()
62%
reduce()
7%
map()
18%
collect()
👍8🔥3🤨2
Какое поведение будет у Spring Bean, если пометить его @Lazy?
Anonymous Quiz
3%
Бин будет создан при старте приложения
90%
Бин создаётся при первом обращении
1%
Бин создаётся параллельно с другими бинами
2%
Бин будет пропущен
5%
Бин создаётся после завершения всех операций приложения
👍4🔥3
Что будет результатом кода?
Anonymous Quiz
24%
Ошибка компиляции
15%
String varargs
38%
Object
9%
NullPointerException
14%
AmbiguousMethodCallException
👍9🔥3
Что будет результатом кода?
Anonymous Quiz
11%
5 10 15 20 30
9%
8 10 20 30
27%
5 8 10 15 20 30
9%
8 10 15 20 30
43%
10 15 20 30
👍11🔥4
Что будет результатом фрагмента кода?
Anonymous Quiz
4%
Ошибка компиляции
7%
3
7%
null
2%
Программа завершится без вывода
80%
IndexOutOfBoundsException
👍10🔥3
Что можно импортировать статически?
Обычный импорт избавляет от необходимости писать полное имя классов: при использовании можно не указывать пакет. Статические импорты делает то же самое, но для статических членов класса.
Самое распространенное применение статического импорта – включение констант из константных интерфейсов и статических методов из утилитарных классов. Но также можно включать и изменяемые статические поля других классов.
Отдельно интересен случай nested-класса. Он одновременно является и классом, и статическим членом другого класса. Поэтому для него работает как обычный, так и статический импорт.
Языковая конструкция static import обязана располагаться там же, где и обычные импорты – обязательно между package и объявлением основного класса файла.
Java Guru🤓 #java
Обычный импорт избавляет от необходимости писать полное имя классов: при использовании можно не указывать пакет. Статические импорты делает то же самое, но для статических членов класса.
Самое распространенное применение статического импорта – включение констант из константных интерфейсов и статических методов из утилитарных классов. Но также можно включать и изменяемые статические поля других классов.
Отдельно интересен случай nested-класса. Он одновременно является и классом, и статическим членом другого класса. Поэтому для него работает как обычный, так и статический импорт.
Языковая конструкция static import обязана располагаться там же, где и обычные импорты – обязательно между package и объявлением основного класса файла.
Java Guru🤓 #java
👍7🔥4❤3
Для чего нужно ключевое слово super?
Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:
1. Задать нижнюю границу generic-типа: Consumer<? super Number>
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo = super.foo
3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
4. В случае неопределенности, уточнить родительский тип (на картинке)
Java Guru🤓 #java
Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:
1. Задать нижнюю границу generic-типа: Consumer<? super Number>
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo = super.foo
3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
4. В случае неопределенности, уточнить родительский тип (на картинке)
Java Guru🤓 #java
👍14🔥7❤1
Что будет результатом кода?
Anonymous Quiz
16%
Ошибка компиляции
7%
Exception caught
34%
Finally block executed
31%
Exception caught и затем Finally block executed
12%
программа завершится с ошибкой
👍9🤨4🔥3
Можно ли переопределить статический метод?
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
Java Guru🤓 #java
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
Java Guru🤓 #java
👍16🔥7❤6