Изключения са основна концепция в Java програмирането, която ти помага да се справяш с неочаквани ситуации в кода си. Докато вече си научил как да се обработват изключения, сега е време да направиш следващата стъпка: да изхвърляш и определяш свои собствени изключения. В это ръководство ще ти покажа как да генерираш свои собствени изключения в кода си и как да създадеш персонализирани класове за изключения, които ще ти помогнат да направиш кода си по-ясен и стабилен.
Най-важни изводи
- Можеш да изхвърляш свои собствени изключения в Java, за да се справяш по-добре със специфични грешки.
- Определянето на собствени класове за изключения ти позволява да направиш обработката на грешки по-естествена и разбираема.
- Ще научиш как да изхвърляш изключения както в методи, така и как да работиш с блокове Try-Catch.
Стъпка по стъпка ръководство
1. Освежаване на работата с изключения
В началото е важно да си спомниш как изглежда работата с изключения в Java. Можеш да си припомниш конструкциите try-catch, които ти позволяват да улавяш грешки и да реагираш на тях. В предишния курс видя как се обработва NumberFormatException, когато се извършва невалидно преобразуване на строка в число.
2. Изключения в твоя собствен код
Сега искаме да разгледаме как можеш да изхвърляш изключения в твоя собствен код. Това може да бъде особено полезно, когато искаш да дефинираш специфични условия за грешки в твоите програми, които не се обработват по подразбиране в Java.

3. Създаване на клас за валидация
Нека разгледаме примерен клас, който наричаме MyValidator. Този клас получава метод, който очаква кодов сегмент за валидация, в нашия случай ПИН код. Ако въведеният ПИН код не отговаря на определена стойност, се изхвърля изключение.
4. Генериране и улавяне на грешки
Вътре в метода validateCode можеш да създадеш if проверка. Ако кодът не отговаря на очакваната стойност, изхвърляш ново изключение, което изглежда по следния начин: throw new Exception("Само 42 е отговорът на всички въпроси.");. В този случай използваш ключовата дума throw, за да създадеш изключението.
5. Адаптиране на методната сигнатура
За да сигнализираш, че този метод може да изхвърля изключение, трябва да включиш ключовата дума throws в сигнатурата на метода. Следователно методът сега изглежда така: public void validateCode(int code) throws Exception. По този начин изхвърлянето на изключението е ясно комуникирано и всички извикващи метода са задължени да се справят с него.
6. Обработка на изключение в блока Try-Catch
За да уловиш изключението, можеш да поставиш метода в блок try-catch. По този начин при настъпването на изключение кодът в catch блока ще се изпълни, където ще извършиш специфично управление на грешки, например изход с грешка.
7. Опционално повторно изхвърляне на изключения
Можеш също да помислиш за повторно изхвърляне на улечено изключение, за да го предадеш на по-високо логическо ниво. Въпреки това, трябва да имаш предвид, че това е уместно само ако не си в главния метод, тъй като обикновено след catch блока не следва друг код.
8. Предимствата на собствените изключения
Най-голямото предимство на собствените класове за изключения е, че те са интуитивно именовани и специфични за конкретния случай на приложение. Вместо да работиш с обобщени изключения, можеш да дефинираш специфични класове като NotFoundException или InvalidInputException. Те не само че ти помагат при идентифицирането на грешки, но също така улесняват отстраняването на проблеми и поддръжката на кода ти.

Резюме – Изхвърляне и определяне на изключения в Java
Чрез изхвърляне и определяне на собствени изключения получаваш мощен инструмент за ефективна обработка на грешки и правене на кода ти по-четим. Можеш да формулираш специфични условия за изключение и да подобриш логичното разделяне на грешки, което вдига поддръжката на програмата ти.
Често задавани въпроси
Каква е разликата между checked и unchecked изключения?Checked изключенията трябва да бъдат обработени в сигнатурата на метода, докато unchecked изключенията не е необходимо да бъдат обработени.
Защо да създавам собствени изключения?Собствените изключения помагат с конкретни съобщения за грешки, които целят да идентифицират проблемите по-добре и да направят кода по-четим.
Как да изхвърля изключение в метод?Използваш ключовата дума throw, последвана от нова инстанция на изключението.
Трябва ли да посоча в декларацията на метода, че изхвърлям изключение?Да, за това използваш ключовата дума throws в сигнатурата на метода.
Какво се случва, ако не обработя изключение?Програмата обикновено ще се прекрати с runtime изключение, освен ако изключението не е невалидно и не е обработено.