Выбор ответа Middle JVM: память, GC, загрузка классов обновлено

Делегирование загрузчиков

Вопрос

Можно ли подменить java.lang.String, положив свой класс с таким именем в classpath?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: загрузчик сначала спросит родителя, и String возьмёт bootstrap. Модель делегирования: Application загрузчик сначала спрашивает Platform, тот Bootstrap.

Варианты ответа

  1. Да: classpath приложения проверяется раньше JDK, и свой класс победит
  2. Да, если класс скомпилирован той же версией javac, что и JDK
  3. Нет: загрузчик сначала спросит родителя, и String возьмёт bootstrapправильный ответ
  4. Нет, потому что String объявлен final и подменить его нельзя

Разбор

Модель делегирования: Application загрузчик сначала спрашивает Platform, тот Bootstrap. Bootstrap находит String в модуле java.base и загружает его, до classpath дело не доходит. Кроме того, определять классы в пакетах java.* запрещено. Модификатор final запрещает наследование, а не подмену класса.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме