Исключения #
1. Расскажите про иерархию исключений #

Exceptions
Class Throwable - общий предок для всех исключений
2. Что такое Error и Exception? #
Exception - это исключения выполнения программы Error - ошибки JVM, программисту не стоит обрабатывать их через try-catch
3. Расскажите про обрабатываемые и необрабатываемые исключения #
Проверяемые (checked) исключения обязаны быть явно обработаны до компиляции (Exception и некоторые наследники) Непроверяемые (unchecked) не требуют явной обработки (Error, RuntimeException)
4. О чем говорит ключевое слово throws? #
Ключевое слово throws говорит о том, что метод может выбросить исключение указанных типов. Передаёт обработку исключения вышестоящему методу.
5. Как создать собственное («пользовательское») исключение? #
Наследоваться от RuntimeException (рекомендуется, но можно и от Exception), переопределить методы при необходимости
6. Расскажите про механизм обработки исключений в java (Try-catch-finally) #
Блок try - блок, содержащий код, который может выбросить исключение при выполнении Блок catch - блок, “ловящий” выброшенные в try исключения при соответствии его типа с ожидаемым Блок finally - блок, выполняющийся после блоков try и catch вне зависимости от того, было ли выброшено исключение. Например, чтобы освободить какой-то ресурс
7. Возможно ли использование блока try-finally (без catch)? #
Да, в таком случае после try выполнится finally
8. Может ли один блок catch отлавливать сразу несколько исключений? #
Да
9. Всегда ли выполняется блок finally? Существуют ли ситуации, когда блок finally не будет выполнен? #
Да, кроме случаев завершения программы или JVM. finally может не выполниться, если в блоке try вызывается System.exit(0)
10. В каком порядке следует обрабатывать исключения в catch блоках? #
От наследника к родителю (от более специфичных к общему). В противоположном случае до наследников невозможно добраться, т.к. родительское исключение будет перехватывать всё
11. Что такое механизм try-with-resources? #
Это механизм, который автоматические закрывает ресурс, объявленный в круглых скобках try(). В качестве ресурса можно использовать любой объект, класс которого реализует интерфейс AutoClosable или Closable (Scanner, например)
12. Ошибка OutOfMemoryError. Поймать утечку памяти и пофиксить #
Ошибка OutOfMemoryError возникает, когда JVM не может выделить достаточно памяти для выполнения программы. Это может быть связано с утечками памяти, неправильной конфигурацией или большим объемом данных. Вот пошаговый процесс, как выявить и устранить причину:
- Сделать дамп памяти
- Проанализировать дамп, найти причины утечек. Типичные источники:
- неосвобождённые ресурсы
- переполненные коллекции
- статические ссылки (в т.ч. статические коллекции)
- неотписавшиеся слушатели
- Устранить причины
13. @SneakyThrows в Lombok #
@SneakyThrows — это аннотация Lombok, которая позволяет автоматически обрабатывать исключения, не требуя явного указания try-catch или объявления throws в методе. Lombok оборачивает вызов в блок, который выбрасывает исключение как RuntimeException
@SneakyThrows
public void riskyMethod() {
throw new IOException("Exception example"); // Не нужно объявлять throws IOException
}
14. StackOverflowError vs OutOfMemoryError #
StackOverflowError - выбрасывается при переполнении стека (в стеке не хватает памяти). Обычно возникает при рекурсиях. Можно решить через -Xss параметр JVM, но как правило, проблема именно в рекурсии, её и нужно решить.
OutOfMemoryError - выбрасывается когда JVM не может выделить достаточно памяти в куче для создания нового объекта. Возможные причины:
- создание очень большого массива или объекта
- утечки памяти (неочищенные ссылки на объекты)
- чрезмерное создание объектов без их удаления
- чрезмерное ограничение памяти кучи через JVM параметр
-Xmx(по умолчанию 256 МБ) Варианты решения: - использовать профилировщики памяти для анализа (
VisualVM,MAT) - удалять ненужные объекты (
list.clear(),null-ссылки) - увеличить ограничение памяти JVM (
-Xmx1024m) - оптимизировать управление памятью (использовать
WeakReference,SoftReference)