Найти в Дзене

Расскажи, что ты знаешь про исключения. Собеседование.

Если честно, я не думаю, что меня такое спросят. Но хочется разобрать что-то легкое, так что просто вспомним исключения. Для меня исключения воспринимаются не как ошибка, а как сигнал, что произошла исключительная ситуация. Все исключения создаются в куче (а это значит, что сборщик мусора сам о них позаботится). У всех исключений есть два конструктора: стандартный пустой по умолчанию и конструктор, куда мы можем передать какой-то текст. Выбросить исключение мы можем с помощью ключевого слова throw, который получает ссылку на объект исключения. По сути, это механизм возврата из метода. Мы выходим из области действия и исполнение текущего метода завершается. При выходе из метода управление передается обработчику исключения, который может быть вообще далеко-далеко. Например, исключение бросается в датасорсе, а обработчик находится внутри ViewModel. Можем перехватывать исключения с помощью try-catch. Можем создавать свои собственные исключения. Для этого надо просто унаследовать от уже сущ

Если честно, я не думаю, что меня такое спросят. Но хочется разобрать что-то легкое, так что просто вспомним исключения.

Для меня исключения воспринимаются не как ошибка, а как сигнал, что произошла исключительная ситуация.

Все исключения создаются в куче (а это значит, что сборщик мусора сам о них позаботится). У всех исключений есть два конструктора: стандартный пустой по умолчанию и конструктор, куда мы можем передать какой-то текст.

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

Можем перехватывать исключения с помощью try-catch.

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

Желательно, у методов указывать ключевое слово throws и список всех исключений, которые метод может прокинуть вверх. Так мы предупредим разработчиков о том, что надо не забыть обработать исключения. Кстати, не помню, есть ли это в стандартном линте, но можно написать кастомное правило, чтобы проверялось постоянно.

Исключения, которые проверяется и навязываются компилятором, называются проверяемыми.

Все исключения происходят от Throwable. Существуют две основные группы: Error (используется виртуальной машиной Java для сообщений о системных ошибках и обычно они не перехватываются) и Exception.

RuntimeException — исключения, которые автоматически возбуждаются и нам нет смысла бросать их с помощью throw.

Часто бывает, что вне зависимости от исключения, нам надо выполнить еще что-то. Например, освободить ресурсы или что-то вернуть в первоначальное состояние. Тут поможет finally. Этот блок выполнится всегда.

Один из плюсов исключения: мы можем сосредоточиться на решаемой задаче в одном месте, а затем разобраться с ошибками в другом месте.

Какие вопросы можно задать?

— Раз ты сказала про кучу, то давай перейдем к тому, как устроена память в андроиде.

— А что делает линт? Какие еще инструменты ты знаешь?

— Ты еще про компилятор сказала. Что это?

— Что за датасорсы и ViewModel?

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

Но, на всякий случай, вот табличка из интернета: