Грешке су подједнако корисници и програмери. Програмери очигледно не желе да њихови програми пропадају на сваком кораку и корисници су сада толико навикли да имају грешке програма за које грубо прихватају да плате цену софтвера који ће готово сигурно имати најмање једну грешку то. Јава дизајниран је да програмеру пружи спортску шансу у дизајнирању апликације без грешака. Постоје изузеци за које програмер зна да су могућност када апликација комуницира са неким ресурсом или корисником и тим изузетцима се може руковати. Нажалост, постоје изузеци које програмер не може контролисати или их једноставно превиди. Укратко, сви изузеци нису створени једнаким и зато програмер може размислити о неколико врста.
Изузетак је догађај због којег програм не може тећи у свом предвиђеном извршавању. Постоје три врсте изузетака - одјављени изузетак, грешка и изузетак током извођења.
Проверена изузетак
Проверени изузеци су изузеци са којима би требало да се носи Јава апликација. На пример, ако апликација чита податке из датотеке, требало би да је у могућности да обрађује
ФилеНотФоундЕкцептион
. На крају, нема гаранције да ће очекивани фајл бити тамо где треба да буде. На датотечном систему се може догодити било шта, о чему апликација не би имала појма.Да узмемо овај пример корак даље. Рецимо да користимо ФилеРеадер
класе за читање датотека са знаковима. Ако имате поглед на Дефиниција ФилеРеадер конструктора у Јава апи видећете да се ради о потпису методе:
јавни ФилеРеадер (Стринг филеНаме) баца ФилеНотФоундЕкцептион.
Као што видите конструктор посебно каже да ФилеРеадер
конструктор може бацити ФилеНотФоундЕкцептион
. Ово има смисла јер је велика вероватноћа да ће назив документа
Стринг повремено буде погрешан. Погледајте следећи код:
јавни статички воид маин (Стринг [] аргс) { ФилеРеадер филеИнпут = нулл; // Отворите улазну датотеку. филеИнпут = нови ФилеРеадер ("Унтитлед.ткт"); }
Синтактички су изјаве тачне, али овај се код никада неће компајлирати. Компајлер зна ФилеРеадер
конструктор може бацити ФилеНотФоундЕкцептион
и на овом је изузећу одговоран код. Постоје два избора - прво можемо пренијети изузетак из наше методе специфицирањем а бацања
клаузула такође:
јавни статички воид маин (Стринг [] аргс) баца ФилеНотФоундЕкцептион { ФилеРеадер филеИнпут = нулл; // Отворите улазну датотеку. филеИнпут = нови ФилеРеадер ("Унтитлед.ткт"); }
Или се заправо можемо носити са изузетком:
јавни статички воид маин (Стринг [] аргс) { ФилеРеадер филеИнпут = нулл; покушати. { // Отворите улазну датотеку. филеИнпут = нови ФилеРеадер ("Унтитлед.ткт"); } ухватити (ФилеНотФоундЕкцептион ек) { // реците кориснику да иде и пронађе датотеку. } }
Добро написане Јава апликације требало би да се носе са провјереним изузецима.
Грешке
Друга врста изузетка позната је као грешка. Када се догоди изузетак, ЈВМ створиће објекат изузетака. Сви ови предмети потичу из Тхровабле
класа. Тхе Тхровабле
класа има две главне подкласе - Грешка
и Изузетак
. Тхе Грешка
класа означава изузетак са којим апликација вероватно неће моћи да се бави.
Ови изузеци се сматрају ретким. На пример, ЈВМ може да понестане ресурса због тога што хардвер не може да се носи са свим процесима са којима мора да се бави. Апликација може да прими грешку како би обавестила корисника, али обично ће се апликација морати затворити док се не реши основни проблем.
Изузеци током извођења
А Изузетак од времена извођења догађа се једноставно зато што је програмер погрешио. Написали сте код, компајлеру све изгледа добро, а кад кренете да покренете код, пада због тога покушао приступити елементу низа који не постоји или је логичка грешка проузроковала да се метода назове нулом вредност. Или било који број грешака које програмер може учинити. Али у реду је, те изузеће примећујемо исцрпним тестирањем, зар не?
Грешке и Изузеци током извођења спадају у категорију неконтролисаних изузетака.