Означено изузетак у односу на време извршења
Изузеци су посебна врста догађаја која могу пореметити нормалан ток програма. Назив изузетак долази од „изузетног догађаја“. Бацање изузетака је процес креирања изузетка и предаје га рунтиме систему. Када систем извршавања прими објект изузетака, покушаће да нађе некога ко би се руковао унутар скупа позива тако што ће га кретати обрнутим редоследом (у којем су методе позване). Рунтиме систем је успешан ако нађе методу са алатком за обраду изузетака. Руковатељ изузецима је блок кода који званично може да обради наведену изузетак. Ако систем извођења нађе одговарајући руковатељ, прослеђиват ће објект изнимке руковатељу. То се зове хватање изузетака. Међутим, ако се изузетак не може обрадити, програм ће се прекинути. У Јави изузеци наслеђују из класе Тхровабле. Означени изузеци су изузеци код којих преводилац примењује руковање. Изузеци током извођења су врста изузетака, које компилатор не проверава.
Шта је проверена изузетак?
Провјерени изузеци су или објекти класе јава.ланг.екцептион или подкласе (осим јава.ланг.РунтимеЕкцептион и његових подкласа). Означени изузеци се „проверавају“ у време компилације. То значи да програмер мора или ухватити или избацити ове изузетке, или ће се компакт жалити (изазивајући грешку преводиоца). Због тога су програмерима добро познати многи проверени изузеци. На примјер, ИОЕкцептион и његове подкласе су провјерени изузеци, и кад год се програмер бави приступом или измјеном датотеке, преводилац провјерава да ли је могуће да се за све могуће ИОЕкцептионс брине програмер.
Шта је изузетак од рунтиме-а?
Изузеци од рунтиме-а састоје се од јава.ланг.РунтимеЕкцептион и свих његових подкласа. Теоретски гледано, они имају исту сврху као и проверени изузеци и могу се бацити или њима се поступати као са провереним изузецима, али руковање њима не примењује преводилац. Стога изузеци од рунтиме-а припадају породици неконтролисаних изузетака. НуллПоинтерЕкцептион, НумберФорматЕцептион, ЦлассЦастЕкцептион и АрраиИндекОутОфБоундсЕкцептион чести су изузеци током извођења на Јави.
Која је разлика између провереног изузећа и изузећа током извршења?
Иако су и проверени изузеци и изузеци током нежељене појаве током извођења програма, они имају своје разлике. Компајлер примењује проверено руковање изузетком, али изузеци током извођења нису. Стога провјерени изузеци морају бити бачени или обрађени како би се код могао саставити, али не постоји такав захтјев у вези с изузецима током извођења. Сходно томе, изузеци за време извођења припадају категорији непроверених изузетака, заједно са грешкама.
Недостатак провјерених изузетака је што програмер то мора средити чак и ако не зна како. Дакле, ако програмер баци нови изузетак без да замота оригинал, след слога који припада оригиналном изузећу ће се изгубити. Овде су корисни изузеци за време извођења. Пошто се сви изузеци током извођења могу обрадити на једном месту, тако програмери могу да напишу мању количину кода. С друге стране, пошто морају бити ухваћени провјерени изузеци, програмер нема изненађења. Увек ће знати који се проверени изузетак може избацити одређеном методом. Супротно овоме, различити изузеци током извршавања могу се бацити без знања програмера.