„Здрасти, Амиго!“

„Здравей, Ели! Как е животът?“

"Отлично, благодаря. Как си?"

„Страхотно, тази сутрин ми бяха обяснени купища нови неща.“

"Е, това е страхотно. Не си ли уморен?"

"Да, това е. Малко съм уморен."

„Значи просто сте извадor късмет. Исках да покрия голяма и сложна тема днес, но в последния момент промених решението си и реших да покрия малка, лесна.“

"Малък и лесен? Готов съм."

„Днес ще разгледаме подробно темата за Изключенията .“

„За обработка на грешки ли говорите?“

„Не трябва да мислите за изключенията като за грешки. Изключенията са по-скоро като доклади, че „се е случило нещо неочаквано“. Въз основа на тези доклади можете да предложите алтернативни действия.“

„Всичко е въпрос на методи.  Когато извикате метод, той обещава да направи това, за което е бил извикан.

„Когато метод, независимо по Howва причина, не може да направи това, за което е бил извикан, той трябва да уведоми повикващия.“

"С други думи, най-лошото нещо, което може да се случи, е методът да не си свърши работата и да не каже на никого за него. Нищо не може да бъде по-лошо от това. Губите контрол над ситуацията, когато това се случи. "

„Когато сте нов програмист, изглежда, че просто извиквате методи и те със сигурност ще направят това, което сте поискали от тях.“

„Когато сте опитен програмист, знаете, че може да има десетки фактори, които влияят на способността на метода да върши работата си и че има много случаи, които могат да попречат на метода да завърши работата си.“

„От гледна точка на програмиста е хиляда пъти по-добре една програма да спре, когато срещне грешка, отколкото ако срещне грешка и след това продължи да работи (неправилно), без потребителят да разбере Howво се е случило.“

„Така че програмата, която показва нещо нередно, може да е по-лошо, отколкото ако програмата се затвори и загуби всички данни?“

„Какво ви накара да мислите, че програмата просто показва нещо неправилно? Може би програмите имат много грешки и всичките ви данни ще бъдат безвъзвратно загубени? Да предположим, че сте въвели текст в продължение на 3 часа, но нищо от него няма да бъде запазено, защото грешка, възникнала само след две minutesи."

„Когато един начинаещ програмист срещне изключения, той се разочарова.“

„Но в действителност изключенията разкриват всички възможни сценарии, които той е трябвало да предвиди, но не е направил.“

"Можете да изберете да не обработвате изключения и това би ви направило лош програмист. Но ако вашите методи не хвърлят изключения, тогава вие изобщо не сте програмист - защото не сте успели да разберете тази проста истина:"

"метод or прави това, за което е писано, or хвърля изключение. Няма трета опция!"

"Добре, вярвам ти. Обещавам да използвам изключения."

„Страхотно. Тогава нека ви разкажа за йерархията на изключенията:“

Йерархия на изключенията, грешки - 1

„Йерархията на изключенията се основава на четири класа.“

„Най-ниският базов клас е Throwable .“

„ Класовете Error и Exception го наследяват.“

" RuntimeException наследява изключение ."

„ Класът Error е основният клас за JVM грешки като StackOverFlow , OutOfMemory , …“

„Програмата обикновено не може да се възстанови от такива грешки, което я води до прекратяване.“

„Наистина, Howво може да се направи, ако няма достатъчно памет, за да може програмата да продължи да работи нормално or е имало препълване на стека?“

" Изключението е базовият клас за всички обикновени изключения, хвърлени от програма.  RuntimeException е специален вид изключение , което има малко по-различни правила."

"Какво са те?"

— Точно това ще обясня сега.

„Както вероятно си спомняте, изключенията попадат в две категории: проверени и непроверени .“

"Ако даден метод хвърля проверени изключения, тогава методът, който го извиква, трябва да обвие извикването в блок try-catch . Е, or това, or повторно хвърляне на изключението (към неговия извикващ) чрез ясно посочване на хвърляния в сигнатурата на метода."

„Тези правила/ограничения не се прилагат за непроверени изключения.“

„Така че всички изключения, които наследяват Exception, се считат за проверени. С изключение на изключенията, които наследяват RuntimeException, които се считат за непроверени.“

— Ъ-ъ. Спомням си, че ми каза нещо подобно по-рано.

„Амиго! Те питат за йерархията на изключенията във всяко интервю . Ще го повторя – всяко интервю . Трябва да знаете тази тема перфектно.“

„Добре. Ще прочета всичко отново и ще разбера. Благодаря, че ми помогна, Ели.“