Upravljanje iznimkama Java

โšก Pametni saลพetak

Java Obrada iznimaka pruลพa strukturirani mehanizam za upravljanje greลกkama tijekom izvoฤ‘enja koje remete normalan tijek programa. Koristi kljuฤne rijeฤi try, catch, finally, throw i throws za otkrivanje, izoliranje i oporavak od iznimnih uvjeta uz odrลพavanje...ping aplikacije robusne i predvidljive.

  • โš ๏ธ Definirana iznimka: Iznimka je dogaฤ‘aj tijekom izvoฤ‘enja koji prekida standardni slijed izvrลกavanja i predstavljen je kao objekt koji opisuje stanje pogreลกke.
  • ๐Ÿงฏ Isprobajte Catch Block: Omotajte riziฤni kod unutar try bloka i nakon njega dodajte jedan ili viลกe catch blokova kako biste elegantno uhvatili odreฤ‘ene tipove iznimaka.
  • ๐Ÿ” Konaฤno ponaลกanje: Blok finally se uvijek izvrลกava nakon try i catch naredbi, ลกto ga ฤini idealnim za zatvaranje datoteka, socketa ili oslobaฤ‘anje drugih sistemskih resursa.
  • โœ… Hijerarhija iznimki: Svi izuzetci nasljeฤ‘uju od Throwable, koji se grana u Error i Exception, pri ฤemu RuntimeException pokriva neprovjerene sluฤajeve poput dijeljenja s nulom.
  • ๐Ÿงช Najbolje prakse: Prvo uhvatite najspecifiฤniju iznimku, izbjegavajte prazne catch blokove, zapisujte smislene poruke i koristite multi-catch kako bi kod bio saลพet i odrลพiv.

Upravljanje iznimkama Java

ล to je iznimka u Java?

An Izuzetak u Java je dogaฤ‘aj koji prekida izvrลกavanje programskih instrukcija i ometa normalan tijek izvrลกavanja programa. To je objekt koji omotava informaciju o dogaฤ‘aju pogreลกke koji se dogodio unutar metode i prenosi se u sustav za izvoฤ‘enje. U Java, iznimke se uglavnom koriste za signaliziranje razliฤitih vrsta pogreลกaka kako bi programeri mogli reagirati na njih na kontroliran naฤin.

Postoje dvije ลกiroke kategorije pogreลกaka u Java:

  1. Pogreลกke vremena kompajliranja
  2. Pogreลกke u izvoฤ‘enju

Greลกke pri kompajliranju mogu se podijeliti u dvije dodatne vrste:

  • Sintaktiฤke pogreลกke
  • Semantiฤke pogreลกke

Primjer sintaktiฤkih pogreลกaka:

Umjesto da se izjasni int a; greลกkom ste to proglasili kao in a;, za ลกto ฤ‡e kompajler izbaciti greลกku.

Primjer semantiฤkih pogreลกaka: Deklarisali ste varijablu int a; i nakon nekoliko redaka koda ponovno deklarirate cijeli broj kao int a;. Sve ove pogreลกke su istaknute kada kompajlirate kod.

Primjer pogreลกaka tijekom izvoฤ‘enja

Pogreลกka u vremenu izvoฤ‘enja naziva se izuzetakTo je bilo koji dogaฤ‘aj koji prekida normalan tok izvrลกavanja programa. Primjeri iznimaka ukljuฤuju aritmetiฤku iznimku, NullPointerException, iznimku dijeljenja s nulom i mnoge druge. Iznimke u Java su uvjeti koji su ฤesto izvan izravne kontrole programera.

Kliknite ovdje ako video nije dostupan

Zaลกto nam je potrebna obrada iznimki?

Pretpostavimo da ste napisali program za pristup posluลพitelju. Sve funkcionira dobro dok razvijateping kod u lokalnom okruลพenju s kontroliranim uvjetima.

Java iznimka Rukovanje

Tijekom stvarnog produkcijskog izvoฤ‘enja, posluลพitelj moลพe biti u kvaru. Kada vaลก program pokuลกa pristupiti njemu, izbacuje se iznimka i bez odgovarajuฤ‡e obrade program ฤ‡e se naglo prekinuti.

Java iznimka Rukovanje

Kako obraditi iznimku u Java

Do sada smo vidjeli da je iznimka ฤesto izvan kontrole programera. Meฤ‘utim, okrivljavanje problema s okolinom za neuspjeh koda nije pravo rjeลกenje. Potrebno vam je robusno programiranje koje se brine o iznimnim situacijama. Takav kod poznat je kao Obraฤ‘ivaฤ iznimki.

U naลกem primjeru, dobra obrada iznimki znaฤila bi da kada primarni posluลพitelj ne radi, program se automatski povezuje s rezervnim posluลพiteljem.

Java iznimka Rukovanje

Da biste to implementirali, mogli biste napisati kod za povezivanje s posluลพiteljem koristeฤ‡i tradicionalne uvjete if i else. Provjerit ฤ‡ete je li posluลพitelj u kvaru i ako jest, napisat ฤ‡ete kod za povezivanje s rezervnim posluลพiteljem. Takva organizacija koda pomoฤ‡u grana โ€žifโ€œ i โ€želseโ€œ nije uฤinkovita kada vaลก kod ima viลกe Java iznimke rukovati.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Isprobajte Catch Block u Java

Java pruลพa ugraฤ‘eni mehanizam za obradu iznimki koji odvaja normalnu logiku od logike oporavka od pogreลกaka.

  1. Normalni kod ulazi u a POKUล AJ blok.
  2. Kod za rukovanje iznimkama ide u ULOV blok.

Pokuลกajte Catch Block

U naลกem primjeru, blok TRY sadrลพavat ฤ‡e kod za povezivanje s posluลพiteljem. Blok CATCH sadrลพavat ฤ‡e kod za povezivanje s rezervnim posluลพiteljem. U sluฤaju da je posluลพitelj ukljuฤen, kod u bloku CATCH bit ฤ‡e ignoriran. U sluฤaju da posluลพitelj ne radi, generirat ฤ‡e se iznimka i izvrลกit ฤ‡e se kod u bloku catch.

Pokuลกajte Catch Block

Dakle, ovako se iznimka obraฤ‘uje u Java.

Sintaksa za koriลกtenje try and catch funkcija

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Primjer bloka Try Catch

Korak 1) Kopirajte sljedeฤ‡i kod u editor.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Korak 2) Spremite datoteku i kompajlirajte kod. Pokrenite program pomoฤ‡u naredbe java JavaIznimka.

Korak 3) Aritmetiฤka iznimka, dijeljenje s nulom, prikazana je za redak 5, a redak 6 se nikada ne izvrลกava.

Korak 4) Sada ispitajmo kako ฤ‡e nam try i catch pomoฤ‡i u obradi ove iznimke. Stavit ฤ‡emo redak koda koji uzrokuje iznimku u pokuลกati blok, nakon ฤega slijedi a ulov blokirati. Kopirajte sljedeฤ‡i kod u editor.

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Korak 5) Spremite, kompajlirajte i pokrenite kod. Dobit ฤ‡ete sljedeฤ‡i izlaz.

Pokuลกajte Catch Block

Kao ลกto vidite, iznimka je obraฤ‘ena i zadnji redak koda je takoฤ‘er izvrลกen. Takoฤ‘er, imajte na umu da se redak 7 neฤ‡e izvrลกiti jer ฤim se podigne iznimka, tok kontrole skaฤe na catch blok.

Biljeลกka: Objekt ArithmeticException "e" sadrลพi informacije o iznimci koja se dogodila, ลกto moลพe biti korisno prilikom poduzimanja akcija oporavka.

Java Hijerarhija klasa iznimki

Nakon ลกto se izvrลกi jedna naredba catch, ostale se zaobilaze, a izvrลกavanje se nastavlja nakon blokova try i catch. Ugnijeลพฤ‘eni blokovi catch moraju slijediti hijerarhiju iznimki od najspecifiฤnije podklase do najopฤ‡enitije roditeljske klase.

Java Hijerarhija izuzetaka

  • Sve iznimke klase u Java proลกiriti klasu Throwable. Throwable ima dvije podklase, Error i Exception.
  • Klasa Error definira iznimke ili probleme koji se ne oฤekuju u normalnim okolnostima u vaลกem programu, na primjer, pogreลกka memorije, pogreลกka hardvera ili pogreลกka JVM-a.
  • Klasa Exception predstavlja iznimke koje vaลก program moลพe obraditi, a vaลก se program moลพe oporaviti od tih iznimki pomoฤ‡u blokova try i catch.
  • RuntimeException je podklasa klase Exception. Iznimke ovog tipa predstavljaju neprovjerene iznimke koje se javljaju za vrijeme izvoฤ‘enja i ne mogu se otkriti za vrijeme kompajliranja. Dobri primjeri ukljuฤuju iznimku dijeljenja s nulom i iznimku nultog pokazivaฤa.
  • IOException se generira tijekom operacija ulaza i izlaza.
  • Prekinuta iznimka u Java generira se tijekom viลกenitnih operacija kada se nit prekine.

Primjer: Ugnijeลพฤ‘ivanje blokova try i catch

Korak 1) Kopirajte sljedeฤ‡i kod u editor.

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Korak 2) Spremite datoteku i kompajlirajte kod. Pokrenite program pomoฤ‡u naredbe, Java Javaizuzetak.

Korak 3) Generira se iznimka ArrayIndexOutOfBoundsException. Promijenite vrijednost int d na 0. Spremite, kompajlirajte i pokrenite kod.

Korak 4) Mora se generirati ArithmeticException.

Korak 5) Odkomentirajte redak 10 do retka 12. Spremite, kompajlirajte i pokrenite kod.

Korak 6) Greลกka pri kompilaciji? To je zato ลกto je Exception osnovna klasa klase ArithmeticException. Bilo koja iznimka koju generira ArithmeticException takoฤ‘er se moลพe obraditi klasom Exception. Dakle, blok catch klase ArithmeticException nikada neฤ‡e dobiti priliku za izvrลกenje, ลกto ga ฤini redundantnim. Stoga dolazi do pogreลกke pri kompilaciji.

Java Konaฤno Blokiraj

Konaฤni blok je izvrลกava se bez obzira na pokrenutu iznimku u bloku pokuลกaja. to je opcionalno za koriลกtenje s blokom try. Blok finally je pravo mjesto za oslobaฤ‘anje resursa kao ลกto su veze s bazom podataka, datoteke ili mreลพne utiฤnice.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Ako se u bloku try pojavi iznimka, blok finally se izvrลกava nakon ลกto se zavrลกi blok catch.

Primjer konaฤnog bloka

Korak 1) Kopirajte sljedeฤ‡i kod u editor.

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

Korak 2) Spremi, kompajliraj i pokreni kod.

Korak 3) Oฤekivani izlaz: Blok finally se izvrลกava iako je izazvana iznimka.

Korak 4) Promijenite vrijednost varijable d = 1. Spremite, kompajlirajte i pokrenite kod te promatrajte izlaz.

Najbolji primjeri iz prakse za Java iznimka Rukovanje

Slijeฤ‘enje nekoliko provjerenih pravila pomoฤ‡i ฤ‡e vam da odrลพite svoje Java kod otporan, ฤitljiv i jednostavan za ispravljanje pogreลกaka:

  • Prvo uhvatite najspecifiฤniju iznimku, a zatim one opฤ‡enitije, kako biste oฤuvali integritet hijerarhije iznimki.
  • Izbjegavajte prazne catch blokove. Minimalno, zabiljeลพite iznimku kako se uzrok nikada ne bi izgubio.
  • Koristite finally blok ili try s resursima za oslobaฤ‘anje datoteka, utiฤnica i veza s bazom podataka.
  • Provjerene iznimke bacajte samo kada pozivatelj moลพe razumno oporaviti situaciju, a neprovjerene iznimke koristite za programske pogreลกke.
  • Zamotajte iznimke niske razine u smislenu poslovnu iznimku kako biste odrลพali API contracฤisto je.
  • Nikada ne gutajte InterruptedException tiho u viลกenitnom kodu, umjesto toga vratite zastavicu prekida.

Pitanja i odgovori

Provjereni iznimci se provjeravaju u vrijeme kompajliranja i moraju se deklarirati ili uhvatiti, kao ลกto je IOException. Neprovjereni iznimci proลกiruju RuntimeException, javljaju se u vrijeme izvoฤ‘enja i ne zahtijevaju obavezno rukovanje, kao ลกto su NullPointerException ili ArithmeticException.

Blok finally se uvijek izvrลกava nakon blokova try i catch, bez obzira na to je li doลกlo do iznimke ili ne. To je najsigurnije mjesto za oslobaฤ‘anje resursa kao ลกto su ruฤke datoteka, veze s bazom podataka ili utiฤnice, osiguravajuฤ‡i ฤist zavrลกetak operacija.

Kljuฤna rijeฤ throw koristi se unutar metode za stvarno podizanje objekta iznimke, dok se throws koristi u potpisu metode za deklariranje da metoda moลพe proslijediti odreฤ‘ene provjerene iznimke svom pozivatelju za obradu.

Da. Nakon bloka try moลพe slijediti blok finally bez ikakvog bloka catch. Ovaj se obrazac koristi kada programer ลพeli osigurati da se kod za ฤiลกฤ‡enje izvrลกava ฤak i ako se sama iznimka ลกiri pozivatelju.

Da. Alati za promatranje pokretani umjetnom inteligencijom analiziraju stog traczapise, zapisnike i putanje koda kako bi se predvidjelo gdje ฤ‡e se vjerojatno pojaviti iznimke tijekom izvoฤ‘enja. Predlaลพu obrambene provjere, preporuฤuju postavljanje hvatanja i povrลกinske anomalije, pomaลพuping timovi sprjeฤavaju padove prije nego ลกto doฤ‘u do proizvodnje.

AI asistenti parsiraju stog traces, povezuju ih s izvornim kodom i predlaลพu vjerojatne uzroke i rjeลกenja. Generiraju predloลกke try catcha, preporuฤuju poboljลกanja zapisivanja, pa ฤak i prepisuju neispravne metode, dramatiฤno smanjujuฤ‡i vrijeme koje programeri provode dijagnosticirajuฤ‡i Java iznimke.

Saลพmite ovu objavu uz: