Oglas

Kao početnik u programiranju Kako naučiti programiranje bez ikakvog stresaMožda ste se odlučili baviti programiranjem, bilo radi karijere 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. Čitaj više , 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 zloupotrebi i zlouporabi.

U ovom ćete članku naučiti što su iznimke, zašto su važne, kako se koristiti i česte pogreške koje treba izbjegavati. Većina modernih jezika 6 najlakših jezika za programiranje za učenje za početnikeNaučiti programirati znači pronalaženje pravog jezika jednako koliko i postupak edifikacije. Slijedi prvih šest najlakših programskih jezika za početnike. Čitaj više imati nekakve postupke s iznimkama, pa ako hoćete ikad prijeći s Jave 7 korisnih trikova za savladavanje novog programskog jezikaU redu je biti preopterećen kada učite kodirati. Vjerojatno ćete stvari zaboraviti čim ih naučite. Ovi savjeti mogu vam pomoći da bolje zadržite sve te nove informacije.

instagram viewer
Čitaj više , većinu ovih savjeta možete ponijeti sa sobom.

Razumijevanje Java izuzetaka

U Javi, an izuzetak je objekt koji označava da se tijekom pokretanja vaše aplikacije dogodilo nešto nenormalno (ili „iznimno“). Takvi su izuzeci bačen, što u osnovi znači da se stvara izuzetak (slično načinu na koji se pogreške podižu).

Ljepota je u tome što možete ulov izuzeti izuzeci, š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 NullPointerExceptions prije nego što je null varijabla imati 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. Neki od najčešći izuzeci Java uključuju:

  • NullPointerException
  • NumberFormatException
  • IllegalArgumentException
  • RuntimeException
  • IllegalStateException

Pa što se događa kad baciš 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 ručka. Ako ne, pregledava metodu koja je pozvala da metoda, a zatim slijedeća metoda itd. Ako se iznimka ne uhvati, aplikacija ispisuje trag snopa, a 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 kojima je Java prešao dok je tražio izuzetak. 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.

No opet, istinska korist izuzetaka je ta što možete obraditi abnormalno stanje tako što ćete uhvatiti iznimku, ispraviti stvari i nastaviti program bez rušenja.

Korištenje Java iznimki u kodu

Recimo da imate someMethod () koja 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. Ovo bi moglo biti dobro mjesto za izuzeće:

javna void someMethod (vrijednost int) {if (vrijednost <0 || vrijednost> 100) {baciti novo IllegalArgumentException(); } //... }

Da biste uhvatili ovu iznimku, morate ići kamo someMethod () zove se i koristi pokušaj-ulov 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 unosimo pokusni 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šavanje unutar bloka hvatanja.

Što bi se dogodilo da nazovemo neki Metod (50) umjesto toga? IllegalArgumentException nikad se ne bi bacili. someMethod () pogubio 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 obrađuje iznimku} catch (NullPointerException e) {// ovdje obrađuje iznimku} //... }

Također imajte na umu da izborno konačno i blok postoji:

javna nevažeća metoda () {pokušaj {//... } hvatanje (iznimka e) {//... } napokon {//... } }

Kod unutar konačno blokiranog je stalno pogubljen bez obzira na sve. Ako imate povratnu izjavu u pokušaju, zadnji 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 i kasnije izbacili iznimku, konačni blok omogućuje vam zatvaranje datoteke 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šta da izuzeti izuzeci šire svoj postupak stavak poziva (tj. ovdje ne želite obraditi iznimku, ali svejedno morate očistiti prvi).

Provjereno vs. Neprovjerene iznimke u 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 metodu u kojoj se baca izuzetak ili se inače kod ne sastavlja.

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. Budući da je Java ugrađena IOException je označena iznimka, sljedeći se kôd neće sastaviti:

javna void wontCompile () {//... ako (someCondition) {bacite novu IOException (); } //... }

Prvo morate izjaviti da baca provjereni izuzetak:

javna void willCompile () baca IOException {//... ako (someCondition) {bacite novu IOException (); } //... }

Imajte na umu da se metoda može proglasiti izbacivanjem iznimke, ali nikada izuzev. Uprkos tome, iznimka će se i dalje morati uhvatiti ili se inače neće kôd sastaviti.

Kada treba koristiti provjerene ili neprovjerene iznimke?

Službena Java dokumentacija sadrži a stranice o ovom pitanju. Razliku rezimira sa sažetim pravilom: "Ako se može opravdano očekivati ​​da se klijent može oporaviti od iznimke, napravi to provjerenog izuzeća. Ako klijent ne može učiniti ništa kako bi se oporavio od iznimke, učini to neprovjerenom iznimkom. "

Ali ova smjernica može biti zastarjela. S jedne strane provjereni izuzeci rezultiraju snažnijim kodom 10 savjeta za pisanje čistije i bolji kodPisanje čistog koda izgleda lakše nego što zapravo jest, ali koristi su vrijedne toga. Evo kako danas možete početi pisati čistiji kod. Čitaj više . S druge strane, niti jedan drugi jezik nije provjerio iznimke na isti način kao Java, što pokazuje dvije stvari: prvo, ova značajka nije dovoljno korisna da je drugi jezici ukradu, a dva, bez kojih možete apsolutno živjeti ih. Osim toga, provjerene iznimke ne igraju se lijepo s lambda izrazima uvedenima u Javi 8.

Smjernice za upotrebu iznimki u Javi

Izuzeci su korisni, ali ih se lako i zloupotrijebi. Evo nekoliko savjeta i najboljih iskustava koji će vam pomoći da ne budete pravi nered.

  • Preferirajte određene iznimke od općih iznimki. Koristiti NumberFormatException nad IllegalArgumentException ako je moguće, u protivnom upotrijebite IllegalArgumentException nad RuntimeException kad je to moguće.
  • Nikad ne uhvatite Za odbaciti! izuzetak klasa se zapravo proširuje Za odbaciti, a blok hvata zapravo radi sa Za odbaciti ili bilo koju klasu koja se proteže za Throwable. Međutim greška klasa se također proširuje Za odbaciti, i nikad ga ne želite uhvatiti greška jer greškas ukazuju na ozbiljna nerešiva ​​pitanja.
  • Nikad ne uhvatite izuzetak!InterruptedException proteže se izuzetak, pa bilo koji blok koji uhvati izuzetak također će uhvatiti InterruptedException, a to je vrlo važna iznimka s kojom se ne želite miješati (posebno u aplikacijama s više niti), 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 bacite iznimku, možete unijeti Niz poruka kao argument. Ovoj se poruci može pristupiti u bloku hvata pomoću gumba Exception.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 zaobišli 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, barem ispisujte trag snopa, tako da znate da je iznimka bačena. To možete učiniti pomoću gumba Exception.printStackTrace () metoda.
  • Pazite prekomjerne iznimke. Kad imate čekić, sve izgleda poput čavala. Kad prvi put saznate o iznimkama, možda ćete se osjećati obaveznima sve pretvoriti u iznimku... do točke kada se najveći dio kontrolnog toka vaše aplikacije svodi na postupanje s iznimkama. Zapamtite, iznimke su namijenjene "iznimnim" događajima!

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 taj koncept, to je u redu! Trebalo mi je neko vrijeme da mi je "kliknuo" u glavu, pa ne osjećaš kao da trebaš brzati 6 Znakovi da ne treba biti programerNisu svi sigurni da su programeri. Ako niste sasvim sigurni da ste namijenjeni programeru, evo nekoliko znakova koji vas mogu usmjeriti u pravom smjeru. Čitaj više . Uzmi si vremena.

Imate li kakvih pitanja? Znate li za neke druge savjete vezane uz iznimke koje sam propustio? Podijelite ih u komentarima ispod!

Joel Lee ima B.S. u računalnim znanostima i preko šest godina profesionalnog pisanja. Glavni je urednik MakeUseOf-a.