Какие исключения в Java не требуют обязательной обработки (unchecked)?

Ответ

В Java непроверяемые (unchecked) исключения не требуют обязательного объявления в throws или обработки в блоке try-catch. Они являются подклассами RuntimeException или Error.

Основные примеры RuntimeException:

  • NullPointerException – обращение к методу или полю null объекта.
  • ArrayIndexOutOfBoundsException – выход за границы массива.
  • IllegalArgumentException – передача недопустимого аргумента в метод.
  • IllegalStateException – вызов метода в недопустимом состоянии объекта.
  • ClassCastException – некорректное приведение типов.
  • ArithmeticException – арифметическая ошибка (например, деление на ноль).
  • UnsupportedOperationException – вызов неподдерживаемой операции.

Примеры Error (критические ошибки JVM):

  • OutOfMemoryError – недостаточно памяти в куче (Heap).
  • StackOverflowError – переполнение стека вызовов.
  • NoClassDefFoundError – JVM не может найти определение класса.

Пример кода, генерирующего unchecked-исключения:

// NullPointerException
String str = null;
int length = str.length();

// ArrayIndexOutOfBoundsException
int[] numbers = {1, 2, 3};
int value = numbers[5];

// ArithmeticException
int result = 10 / 0;

// ClassCastException
Object obj = "Hello";
Integer num = (Integer) obj;

Хотя эти исключения не требуют обязательной обработки, хорошей практикой является их предвосхищение и корректная обработка для повышения надежности приложения.

Ответ 18+ 🔞

Смотри, вот эта вся хуйня с unchecked исключениями в Java — это как ходить по минному полю в тапочках. Вроде компилятор тебя не держит за жопу, не заставляет оборачивать в try-catch или пихать в throws, но это не значит, что всё безопасно. Это потом аукнется, блядь.

Короче, это всё наследники RuntimeException или Error. Первые — это когда ты сам накосячил по логике, вторые — когда уже JVM, сука, сдалась и руки опустила.

Вот тебе самые популярные RuntimeException, которые будут тебя преследовать:

  • NullPointerException — классика, жанра. Пытаешься позвать метод у null, а он тебе: «А я, блядь, кто? Я — ничто!».
  • ArrayIndexOutOfBoundsException — полез за пятым элементом в массив из трёх. Ну ты гений, ёпта. Индекс — не предложение, его нарушать нельзя.
  • IllegalArgumentException — сунул методу какую-то дичь вместо аргумента. Метод обиделся и швырнул тебе это исключение обратно в ебальник.
  • IllegalStateException — пытаешься вызвать метод не тогда, когда надо. Типа «стартовать» уже работающий движок. Нельзя, блядь, он уже работает!
  • ClassCastException — решил, что строка — это на самом деле Integer. Ну да, конечно, а я — Наполеон. Приведение типов — не магия, ебанашка.
  • ArithmeticException — поделил на ноль. Математику в школе прогуливал? Бесконечность не наступила, наступил пиздец.
  • UnsupportedOperationException — вызвал метод, который специально сделан заглушкой. «Не поддерживается» — значит, не трогай, идиот.

А это уже Error — тут уже не до шуток, это JVM кричит «ВСЁ ПРОПАЛО!»:

  • OutOfMemoryError — память в куче кончилась. Все объекты, которые ты создал и не отпустил, тебя же и придушили. Пиздец, Карл.
  • StackOverflowError — рекурсия ушла в бесконечность и сломала стек. Цикличная зависимость или просто тупой код. Всё, стек переполнен, караул.
  • NoClassDefFoundError — JVM ищет класс, а его нет. Удалил, переместил, сломалась сборка. Класс пропал, и жизнь потеряла смысл.

Вот, смотри, как легко их сгенерировать, даже не стараясь:

// NullPointerException
String str = null;
int length = str.length(); // Ёб твою мать, str же null!

// ArrayIndexOutOfBoundsException
int[] numbers = {1, 2, 3};
int value = numbers[5]; // В массиве всего три, а ты лезешь за пятым! Гений!

// ArithmeticException
int result = 10 / 0; // Делишь на ноль. Нобелевку по математике жди.

// ClassCastException
Object obj = "Hello";
Integer num = (Integer) obj; // Строка — это не Integer, мудак. Что ты делаешь?

Вот и вся магия. Компилятор промолчит, но в рантайме тебе вынесут мозг. Поэтому хоть и не обязательно, но предвидеть эту хуйню и обрабатывать — это признак того, что у тебя в голове не опилки. Надёжность приложения, блядь, от этого и зависит. Не делай вид, что их нет, а то они сделают вид, что нет твоего работающего приложения.