
Harry James
0
908
37
Kao novak u programiranju Kako naučiti programiranje bez svih stresova Kako naučiti programiranje bez ikakvog stresa Možda ste se odlučili baviti programiranjem bilo za karijeru ili samo kao hobi. Sjajno! Ali možda se počinjete osjećati preplavljeno. Nije tako sjajno. Evo pomoći da vam olakša putovanje. , pojam rukovanje izuzetkom može biti teško zamotati glavu. Nije da je sam koncept težak, ali terminologija ga može učiniti naprednijim nego što jest. I to je tako moćna značajka da je sklona zlouporabi i zlouporabi.
U ovom ćete članku naučiti što su iznimke, zašto su važne, kako ih koristiti i česte pogreške koje treba izbjegavati. Većina suvremenih jezika 6 Najlakše programske jezike za učenje za početnike 6 Najlakši programski jezici za učenje za početnike Učenje za programiranje podrazumijeva pronalaženje pravog jezika jednako kao i za postupak izgradnje. Slijedi prvih šest najlakših programskih jezika za početnike. imate neku vrstu rukovanja iznimkama, pa ako ikad prijeđete s Jave 7 Korisni trikovi za savladavanje novog jezika programiranja 7 Korisni trikovi za savladavanje novog jezika programiranja U redu je biti preopterećen kada učite kodirati. Vjerojatno ćete zaboraviti stvari čim ih naučite. Ovi savjeti mogu vam pomoći da bolje zadržite sve te nove informacije. , većinu ovih savjeta možete ponijeti sa sobom.
Razumijevanje Java izuzetaka
U Javi, an izuzetak je objekt koji označava nešto nenormalno (ili “izuzetan”) dogodilo se tijekom pokretanja vaše aplikacije. Takvi su izuzeci bačen, što u osnovi znači da se stvara izuzetak (slično kao i pogreške) “uzdignut”).
Ljepota je u tome što možete ulov izbačene iznimke, što vam omogućuje da se nosite s nenormalnim stanjem i dopušta da se vaša aplikacija nastavi pokretati kao da ništa nije pošlo po zlu. Na primjer, dok bi nulti pokazivač na C mogao srušiti vašu aplikaciju, Java vam omogućuje bacanje i hvatanje NullPointerException
s prije nego što jedna nulto varijabla ima priliku izazvati pad.
Zapamtite, iznimka je samo objekt, ali s jednom važnom karakteristikom: mora se proširiti s izuzetak
klase ili bilo kojeg podrazreda izuzetak
. Iako Java ima sve vrste ugrađenih iznimki, po želji možete stvoriti i svoju. Neke od najčešćih Java izuzetaka uključuju:
NullPointerException
NumberFormatException
IllegalArgumentException
RuntimeException
IllegalStateException
Pa što se događa kad bacite iznimku?
Prvo, Java promatra neposrednu metodu da vidi postoji li kôd koji obrađuje vrstu iznimke koju ste bacili. Ako rukovatelj ne postoji, pregledava metodu koja je pozvala trenutnu metodu da vidi postoji li rukohvat tamo. Ako ne, pregledava metodu koja je pozvala da metoda, a zatim sljedeću metodu itd. Ako izuzetak nije uhvaćen, aplikacija ispisuje trag stoga i zatim se ruši. (Zapravo je to nijansiranije od jednostavnog rušenja, ali to je napredna tema izvan okvira ovog članka.)
stag trag je popis svih metoda koje je Java prešao dok je tražio izvođač iznimke. Evo kako izgleda trag snopa:
Izuzetak u temi "glavni" java.lang.NullPointerException na com.example.myproject.Book.getTitle (Book.java:16) na com.example.myproject.Author.getBookTitles (Author.java:25) na com.example. myproject.Bootstrap.main (Bootstrap.java:14)
Iz ovoga možemo puno toga dobiti. Prvo, bačena izuzetak bio je a NullPointerException
. Dogodilo se u getTitle ()
metoda na liniji 16 Book.java. Ta metoda je nazvana iz getBookTitles ()
na liniji 25 od Autor.java. Da metoda je pozvana iz glavni()
na liniji 14 od Bootstrap.java. Kao što vidite, poznavanje svega toga olakšava uklanjanje pogrešaka.
Ali opet, prava korist izuzetaka je da možete “rukovati” nenormalno stanje hvatanjem iznimke, ispravljanjem stvari i nastavljanjem aplikacije bez rušenja.
Korištenje Java iznimki u kodu
Recimo da imate someMethod ()
koji uzima cijeli broj i izvršava neku logiku koja se može slomiti ako je cijeli broj manji od 0 ili veći od 100. To bi moglo biti dobro mjesto za izuzeće:
javna void someMethod (int vrijednost) if (vrijednost 100) baciti new IllegalArgumentException
(); //…
Da biste uhvatili ovu iznimku, morate krenuti kamo someMethod ()
zove se i koristi pokušaj-uloženi blok:
javna void callMethod () pokušaj someMethod (200); someOtherMethod (); hvatanje (IllegalArgumentException e) // ovdje obradite iznimku //…
Sve unutar probati blok će se izvršavati kako bi se izuzeo izuzetak. Čim se baci iznimka, sve naredne izjave preskaču se i logika aplikacije odmah skače na ulov blok.
U našem primjeru ulazimo u probani blok i odmah zovemo someMethod ()
. Budući da 200 nije između 0 i 100, an IllegalArgumentException
je bačen. Time se odmah završava izvršenje someMethod ()
, preskače ostatak logike u pokušaju bloku (someOtherMethod ()
nikad se ne poziva) i nastavlja izvršenje unutar bloka hvatanja.
Što bi se dogodilo da nazovemo someMethod (50)
umjesto toga? IllegalArgumentException
nikad se ne bi bacili. someMethod ()
izvršio bi se kao normalno. Blok pokušaja izvršit će se kao i obično, pozivajući someOtherMethod ()
kad se nekiMethod () dovrši. Kada someOtherMethod ()
završava, blok ulova bi se preskočio i callingMethod ()
nastavio bi.
Imajte na umu da možete imati više blokova ulova po pokušaju:
javna void callMethod () pokušaj someMethod (200); someOtherMethod (); catch (IllegalArgumentException e) // ovdje obradite iznimku catch (NullPointerException e) // ovdje obradite iznimku //…
Također imajte na umu da izborno konačno i blok postoji:
javna void metoda () pokušaj //… ulov (Izuzetak e) //… napokon //…
Kod unutar konačno blokiranog je stalno pogubljen bez obzira na sve. Ako imate povratnu izjavu u pokušaju bloka, konačno se blok izvršava prije povratka iz metode. Ako bacite drugu iznimku u blok hvatanja, konačno se blok izvršava prije nego što se izuzetak baci.
Konačni blok trebali biste koristiti kada imate predmete koje treba očistiti prije nego što se metoda završi. Na primjer, ako ste otvorili datoteku u pokušaju, a kasnije bacili izuzetak, konačni blok omogućava vam da zatvorite datoteku prije nego što napustite metodu.
Imajte na umu da konačno možete imati blok bez bloka hvatanja:
javna nevažeća metoda () pokušaj //… napokon //…
To vam omogućuje da napravite bilo kakvo potrebno čišćenje, dok dopuštate izuzetim iznimkama da šire propagaciju skupa poziva poziva (tj. Ovdje ne želite obrađivati izuzetak, ali prvo morate očistiti).
Provjereno u odnosu na neprovjerene iznimke na Javi
Za razliku od većine jezika, Java razlikuje između provjerene iznimke i neprovjerene iznimke (npr. C # ima samo neprovjerene iznimke). Provjerena iznimka mora biti uhvaćen u metodi gdje se baca izuzetak ili se inače kod ne može sastaviti.
Da biste stvorili provjerenu iznimku, produžite iz izuzetak
. Da biste stvorili neprovjerenu iznimku, produžite iz RuntimeException
.
Svaka metoda koja baca označenu iznimku mora to označiti u potpisu metode pomoću znaka baca ključne riječi. Otkad je Java ugrađena IOException
je označena iznimka, sljedeći se kôd neće kompilirati:
javna void wontCompile () //… if (someCondition) baci novi IOException (); //…
Prvo morate izjaviti da baca provjereni izuzetak:
javna void willCompile () baca IOException //… ako (someCondition) baci novi IOException (); //…
Imajte na umu da se metoda može proglasiti izbacivanjem iznimke, ali nikada ne izbacuje izuzetak. Uprkos tome, iznimka će se i dalje morati uhvatiti, inače se kôd neće sastaviti.
Kada biste trebali koristiti provjerene ili neprovjerene iznimke?
Službena Java dokumentacija ima stranicu na ovom pitanju. Razlikuje sažetkom s kratkim pravilom: “Ako se opravdano može očekivati da se klijent može oporaviti od iznimke, učini ga provjerenom iznimkom. Ako klijent ne može učiniti ništa kako bi se oporavio od iznimke, učini to neprovjerenom iznimkom.”
Ali ta smjernica može biti zastarjela. S jedne strane, provjerene iznimke rezultiraju snažnijim kodom 10 Savjeti za pisanje čistije i bolji kod 10 Savjeti za pisanje čistije i bolji kod Pisanje čistog koda izgleda lakše nego što zapravo jest, ali prednosti su vrijedne toga. Evo kako danas možete početi pisati čistiji kod. , S druge strane, nijedan drugi jezik nije provjerio iznimke na isti način kao Java, što pokazuje dvije stvari: jedna, značajka nije dovoljno korisna da je drugi jezici ukradu, a dva, možete bez njih apsolutno živjeti. Uz to, provjereni izuzeci ne igraju se lijepo s lambda izrazima uvedenima u Javi 8.
Smjernice za upotrebu iznimki u Javi
Iznimke su korisne, ali lako se zloupotrijebe i zloupotrijebe. Evo nekoliko savjeta i najboljih iskustava koji će vam pomoći da ne napravite nered od njih.
- Preferirajte posebne iznimke od općih iznimki. Koristiti
NumberFormatException
nadIllegalArgumentException
ako je moguće, u protivnom upotrijebiteIllegalArgumentException
nadRuntimeException
kad je to moguće. - Nikad ne uhvatite
Za odbaciti
!izuzetak
klasa se zapravo proširujeZa odbaciti
, i blok hvata zapravo radi saZa odbaciti
ili bilo koju klasu koja se proteže za Throwable. Međutimgreška
klasa se također proširujeZa odbaciti
, i nikad ga ne želite uhvatitigreška
jergreška
s ukazuju na ozbiljna nerešiva pitanja. - Nikad ne uhvatite
izuzetak
!InterruptedException
proteže seizuzetak
, pa svaki blok koji hvataizuzetak
također će uhvatitiInterruptedException
, i to je vrlo važna iznimka s kojom se ne želite posvađati (posebno u aplikacijama s više navoja) osim ako ne znate što radite. Ako ne znate koji izuzetak umjesto toga, uhvatite nešto. - Upotrijebite opisne poruke kako biste olakšali ispravljanje pogrešaka. Kad izbacite iznimku, možete unijeti
Niz
poruka kao argument. Ovoj se poruci može pristupiti u bloku zahvata pomoću gumbaException.getMessage ()
metoda, ali ako se iznimka nikad ne uhvati, poruka će se također pojaviti kao dio praćenja snopa. - Pokušajte ne uhvatiti i zanemariti iznimke. Kako bi se riješili neugodnosti provjerenih izuzetaka, puno će novajlije i lijenih programera postaviti blok hvatanja, ali ostaviti ga praznim. Loše! Uvijek postupajte graciozno, ali ako ne možete, u najmanju ruku ispišite trag snopa, tako da znate da je iznimka bačena. To možete učiniti pomoću gumba
Exception.printStackTrace ()
način. - Pazite na pretjerane iznimke. Kad imate čekić, sve izgleda poput čavala. Kad prvi put saznate za iznimke, možda ćete se osjećati obaveznima sve pretvoriti u iznimku ... do točke kada se veći dio kontrolnog toka vaše aplikacije svodi na postupanje s iznimkama. Zapamtite, iznimke su namijenjene “izuzetan” pojave!
Sada bi vam trebalo biti dovoljno ugodno s iznimkama da biste razumjeli što su oni, zašto se koriste i kako ih uključiti u svoj kod. Ako ne razumijete potpuno koncept, to je u redu! Trebalo mi je neko vrijeme da to učinim “klik” u mojoj glavi, tako da ne osjećate kao da ga trebate žuriti. 6 Znakova da ne biste trebali biti programer 6 Znakovi da ne želite biti programer Nisu svi odlučeni da budu programeri. Ako niste sasvim sigurni da ste namijenjeni programeru, evo nekoliko znakova koji vas mogu usmjeriti u pravom smjeru. , Uzmi si vremena.
Imate li kakvih pitanja? Znate li za neke druge savjete vezane uz iznimke koji su mi nedostajali? Podijelite ih u komentarima ispod!