Napake so podobne uporabnikom in programerjem. Razvijalci očitno ne želijo, da njihovi programi na vsakem koraku prepadajo, uporabniki pa so zdaj tako navajeni, da imajo napake programov, za katere z grozo sprejemajo plačilo cene za programsko opremo, ki bo skoraj zagotovo imela vsaj eno napako v to. Java je zasnovan tako, da programerju nudi športne možnosti pri oblikovanju aplikacije brez napak. Obstajajo izjeme, za katere programer ve, da so možnosti, ko aplikacija sodeluje z virom ali uporabnikom, in te izjeme je mogoče obravnavati. Na žalost obstajajo izjeme, ki jih programer ne more nadzirati ali jih preprosto spregleda. Skratka, vse izjeme niso ustvarjene enakovredno, zato programer lahko razmišlja o več vrstah.
Izjema je dogodek, zaradi katerega program ne more teči v predvideni izvedbi. Obstajajo tri vrste izjem - preverjena izjema, napaka in izjema med izvajanjem.
Preverjena izjema
Preverjene izjeme so izjeme, s katerimi bi se morala spoprijeti aplikacija Java. Na primer, če aplikacija bere podatke iz datoteke, bi morala biti sposobna ravnati z
FileNotFoundException
. Navsezadnje ni nobenega zagotovila, da bo pričakovana datoteka tam, kjer naj bi bila. V datotečnem sistemu se lahko zgodi karkoli, o čemer aplikacija ne bi imela pojma.Če vzamemo ta primer še korak naprej. Recimo, da uporabljamo FileReader
razred za branje znakovne datoteke. Če imate pogled na Definicija konstruktorja FileReader v aplikaciji Java api videli boste, da gre za podpis metode:
javni FileReader (String fileName) vrže FileNotFoundException.
Kot lahko vidite, konstruktor izrecno navaja, da je FileReader
konstruktor lahko vrže a FileNotFoundException
. To je smiselno, saj je zelo verjetno, da bo Ime datoteke
String bo občasno napačen. Poglejte naslednjo kodo:
javni statični void main (String [] args) { FileReader fileInput = null; // Odprite vhodno datoteko. fileInput = nov FileReader ("Untitled.txt"); }
Sintaktično so trditve pravilne, vendar se ta koda ne bo nikoli zbrala. Prevajalnik pozna to FileReader
konstruktor lahko vrže a FileNotFoundException
in od te izjeme je odvisno od klicne kode. Obstajata dve možnosti - najprej lahko izločimo izjemo iz naše metode, tako da določimo a meče
klavzula tudi:
javni statični void main (String [] args) vrže FileNotFoundException { FileReader fileInput = null; // Odprite vhodno datoteko. fileInput = nov FileReader ("Untitled.txt"); }
Ali pa se z izjemo dejansko lahko spopademo:
javni statični void main (String [] args) { FileReader fileInput = null; poskusi. { // Odprite vhodno datoteko. fileInput = nov FileReader ("Untitled.txt"); } ulov (FileNotFoundException ex) { // povejte uporabniku, naj poišče datoteko. } }
Dobro napisane Java aplikacije bi se morale spoprijeti s preverjenimi izjemami.
Napake
Druga vrsta izjeme je znana kot napaka. Ko pride do izjeme, se JVM bo ustvaril predmet izjeme. Vsi ti predmeti izvirajo iz Zmogljiv
razred. The Zmogljiv
razred ima dva glavna podrazreda - Napaka
in Izjema
. The Napaka
razred označuje izjemo, s katero aplikacija verjetno ne bo kos.
Te izjeme veljajo za redke. Na primer, JVM morda zmanjka virov, ker strojna oprema ne more obvladati vseh procesov, s katerimi se mora spoprijeti. Aplikacija lahko zazna napako, da obvesti uporabnika, vendar jo je običajno treba zapreti, dokler se ne reši osnovne težave.
Izjeme med izvajanjem
A Izjema od izvajanja se zgodi preprosto zato, ker se je programer zmotil. Kodo ste napisali, prevajalniku je vse v redu, in ko greš zagnati kodo, potem pade, ker je poskusil dostop do elementa matrike, ki ne obstaja ali je logična napaka povzročila klic metode z ničlo vrednost. Ali poljubno število napak, ki jih lahko dela programer. Ampak to je v redu, te izjeme zaznamo z izčrpnim testiranjem, kajne?
Napake in Izjeme med izvajanjem spadajo v kategorijo nepreverjenih izjem.