Ответ
Unchecked исключения (наследники RuntimeException) не требуют обязательной обработки в коде. С ними часто сталкиваются в работе:
-
NullPointerException— самая частая проблема при работе с неинициализированными ссылками.String str = null; int length = str.length(); // NullPointerException -
IllegalArgumentException— передача недопустимого аргумента в метод.public void setAge(int age) { if (age < 0) { throw new IllegalArgumentException("Возраст не может быть отрицательным"); } this.age = age; } -
IndexOutOfBoundsException/ArrayIndexOutOfBoundsException— обращение к несуществующему индексу массива или коллекции. -
ClassCastException— неудачное приведение типов во время выполнения.Object obj = "Some string"; Integer num = (Integer) obj; // ClassCastException -
NumberFormatException— ошибка преобразования строки в число.int num = Integer.parseInt("123abc"); // NumberFormatException -
ConcurrentModificationException— изменение коллекции во время итерации по ней (кроме использования итератора).
Почему они unchecked? Эти исключения обычно указывают на ошибки программиста (баги), которые можно и нужно исправлять в коде, а не обрабатывать. Их проверка на этапе компиляции часто нецелесообразна.
Ответ 18+ 🔞
Ну ты смотри, какие у нас тут гости пожаловали — unchecked исключения! Это те самые, с которыми ты, сука, каждый день встречаешься, а компилятор на них смотрит сквозь пальцы, как на какую-то мелочь. Типа, "разбирайся сам, мудила, я тебе не нянька". И правильно, блядь!
Вот смотри, король всех этих пиздецов — NullPointerException. Это когда ты лезешь к переменной, а она, сука, null. Как будто пытаешься позвать друга, а там пустота, блядь. И ты такой: "Э, где длина строки?" — а её нет, пиздец.
String str = null;
int length = str.length(); // Тут тебе и вылезет, хитрая жопа
Дальше идёт IllegalArgumentException. Это когда ты методу какую-то хуйню подсовываешь, а он тебе: "Нет, мудак, так не пойдёт". Например, возраст отрицательный пытаешься установить. Да ты что, блядь, человек из подполья?
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Возраст не может быть отрицательным, ёпта!");
}
this.age = age;
}
А вот IndexOutOfBoundsException — это классика, блядь. Пытаешься достать элемент из массива или списка, а там такого индекса нихуя нет. Как будто в шкафу десять полок, а ты лезешь на одиннадцатую, и на тебя всё валится, пиздец.
Потом у нас ClassCastException. Это когда ты такой умный, пытаешься превратить строку в число насильно. "Ну я же вижу, там цифры!" — а нихуя, там буквы. И программа тебе: "Нет, мудила, это не Integer, это String, в рот меня чих-пых!"
Object obj = "Some string";
Integer num = (Integer) obj; // Тут тебя и накроет, как медным тазом
NumberFormatException — близкий родственник. Пытаешься строку "123abc" в число преобразовать. Ну да, конечно, там же цифры в начале, а остальное — так, мелочь. А программа: "Мудаааак!". И всё.
И на десерт — `ConcurrentModificationException`. Это когда ты коллекцию во время обхода меняешь, да ещё и не через итератор. Представь: ты идёшь по коридору и выкидываешь двери из петель, а потом удивляешься, что в соседнюю комнату зайти не можешь. Вот это оно, блядь.
И запомни, ёпта: эти исключения unchecked не потому, что они неважные, а потому что это обычно твои собственные косяки, которые надо в коде чинить, а не оборачивать в try-catch. Компилятор тебе доверия ебать ноль, вот и не проверяет. Сам виноват, мудила!