Chyby sú zámienkou pre používateľov aj programátorov. Vývojári samozrejme nechcú, aby sa ich programy prepadli na každom kroku, a používatelia sú teraz zvyknutí na chyby programy, ktoré s chuťou akceptujú, že zaplatia cenu za softvér, ktorý bude mať takmer určite najmenej jednu chybu v systéme Windows ono. Jáva je navrhnutý tak, aby poskytol programátorovi športovú šancu pri navrhovaní bezchybnej aplikácie. Existujú výnimky, ktoré bude programátor vedieť, existuje možnosť, keď aplikácia interaguje so zdrojom alebo používateľom a tieto výnimky je možné spracovať. Bohužiaľ, existujú výnimky, ktoré programátor nemôže ovládať alebo jednoducho prehliadnuť. Stručne povedané, všetky výnimky sa nevytvárajú rovnocenné, a preto existuje niekoľko typov, o ktorých by mal programátor premýšľať.
Výnimka je udalosť, ktorá spôsobí, že program nebude schopný prúdiť pri plánovanom spustení. Existujú tri typy výnimiek - začiarknutá výnimka, chyba a výnimka runtime.
Začiarknutá výnimka
Kontrolované výnimky sú výnimky, s ktorými by sa mala Java aplikácia dokázať vyrovnať. Napríklad, ak aplikácia číta údaje zo súboru, mala by byť schopná spracovať
FileNotFoundException
. Koniec koncov, neexistuje žiadna záruka, že očakávaný súbor sa bude nachádzať tam, kde má byť. V systéme súborov by sa mohlo vyskytnúť čokoľvek, čo by aplikácia nemala potuchy.Aby sme urobili tento príklad ešte o krok ďalej. Povedzme, že používame FileReader
trieda na čítanie súboru znakov. Ak sa pozriete na Definícia konštruktora FileReader v api Java uvidíte podpis metódy:
public FileReader (String fileName) vyvolá FileNotFoundException.
Ako vidíte, konštruktér konkrétne uvádza, že FileReader
konštruktor môže hodiť a FileNotFoundException
. To dáva zmysel, pretože je veľmi pravdepodobné, že názov súboru
Reťazec bude z času na čas chybný. Pozrite sa na nasledujúci kód:
public static void main (String [] args) { FileReader fileInput = null; // Otvorte vstupný súbor. fileInput = new FileReader ("Untitled.txt"); }
Syntakticky sú výkazy správne, ale tento kód sa nikdy nebude kompilovať. Kompilátor pozná FileReader
konštruktor môže hodiť a FileNotFoundException
a je na volacom kóde, aby zvládol túto výnimku. Existujú dve možnosti - najprv môžeme preniesť výnimku z našej metódy zadaním a hádže
klauzula tiež:
public static void main (String [] args) vyvolá FileNotFoundException { FileReader fileInput = null; // Otvorte vstupný súbor. fileInput = new FileReader ("Untitled.txt"); }
Alebo môžeme skutočne zvládnuť s výnimkou:
public static void main (String [] args) { FileReader fileInput = null; pokúsiť. { // Otvorte vstupný súbor. fileInput = new FileReader ("Untitled.txt"); } catch (FileNotFoundException ex) { // povedzte používateľovi, aby mal súbor vyhľadať. } }
Dobre napísané Java aplikácie by mali byť schopné zvládnuť kontrolované výnimky.
chyby
Druhý typ výnimky je známy ako chyba. Ak sa vyskytne výnimka, JVM vytvorí objekt výnimky. Všetky tieto objekty pochádzajú z Throwable
trieda. Throwable
trieda má dve hlavné podtriedy— Chyba
a výnimka
. Chyba
trieda označuje výnimku, ktorú aplikácia pravdepodobne nebude schopná vybaviť.
Tieto výnimky sa považujú za zriedkavé. Napríklad, JVM sa môžu vyčerpať zdroje kvôli hardvéru, ktorý nie je schopný zvládnuť všetky procesy, s ktorými sa musí vysporiadať. Je možné, že aplikácia zachytí chybu a upozorní používateľa, ale spravidla sa bude musieť aplikácia zavrieť, kým sa nevyrieši základný problém.
Výnimky za behu
runtime výnimka nastane jednoducho preto, že programátor urobil chybu. Napísali ste kód, všetko vyzerá dobre pre kompilátor a keď idete spustiť kód, prepadne, pretože to sa pokúsil získať prístup k prvku poľa, ktorý neexistuje alebo logická chyba spôsobila, že sa metóda volala metódou null hodnota. Alebo ľubovoľný počet chýb, ktoré môže programátor urobiť. Ale to je v poriadku, tieto výnimky zaznamenávame pomocou dôkladného testovania, však?
Výnimky z chýb a runtime patria do kategórie nekontrolovaných výnimiek.