Выбор ответа Senior Исключения обновлено
Цена исключения
Вопрос
Почему исключения не используют для обычного управления потоком (например, как break из глубокого цикла)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Создание исключения дорогое (стектрейс), код хуже читается. Основная цена в конструкторе Throwable: fillInStackTrace обходит стек вызовов.
Варианты ответа
- Исключения нельзя бросать внутри циклов, компилятор это запрещает
- Создание исключения дорогое (стектрейс), код хуже читаетсяправильный ответ
- Каждое брошенное исключение вызывает сборку мусора в молодом поколении
- catch-блоки выполняются в отдельном потоке, и состояние цикла теряется
Разбор
Основная цена в конструкторе Throwable: fillInStackTrace обходит стек вызовов. Если исключение действительно нужно как сигнал без стека, есть конструктор Throwable(message, cause, enableSuppression, writableStackTrace) с writableStackTrace = false. Но главное: исключение как goto делает поток управления неочевидным. Бросать в циклах можно, GC и потоки тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.