Upravljanje iznimkama Java

U čemu je Exception Java?

Izuzetak u Java je događaj koji prekida izvođenje programskih instrukcija i remeti normalan tijek izvođenja programa. To je objekt koji obavija informacije o događaju pogreške koji se dogodio unutar metode i prosljeđuje se sustavu za izvršavanje. U Java, iznimke se uglavnom koriste za označavanje različitih vrsta stanja pogreške.

Postoje dvije vrste grešaka:

  1. Pogreške vremena kompajliranja
  2. Pogreške u izvođenju

Pogreške vremena kompajliranja mogu se ponovo klasificirati u dvije 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 koje će prevodilac dati grešku.

Primjer: Deklarirali 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 tijekom izvođenja naziva se an iznimke greška. To je svaki događaj koji prekida normalan tijek izvršavanja programa. Primjeri iznimaka su aritmetička iznimka, iznimka Nullpointer, iznimka Dijeljenje nulom, itd. Iznimke u Java su nešto što je izvan kontrole programera.

Kliknite ovdje ako video nije dostupan

Zašto nam treba iznimka?

Pretpostavimo da ste kodirali program za pristup poslužitelju. Stvari su dobro funkcionirale dok ste razvijali kôd.

Java iznimka Rukovanje

Tijekom stvarne proizvodnje, poslužitelj ne radi. Kada mu je vaš program pokušao pristupiti, javlja se iznimka.

Java iznimka Rukovanje

Kako postupati s iznimkom

Do sada smo vidjeli da je iznimka izvan kontrole programera. Ali okrivljavanje neuspjeha koda na probleme zaštite okoliša nije rješenje. Trebate robusno programiranje koje se brine o iznimnim situacijama. Takav kod je poznat kao Rukovatelj iznimkama.

U našem primjeru, dobro rukovanje iznimkama bilo bi, kada poslužitelj ne radi, povezivanje s rezervnim poslužiteljem.

Java iznimka Rukovanje

Da biste ovo implementirali, unesite svoj kod za povezivanje s poslužiteljem (koristeći tradicionalne if i else uvjete). Provjerit ćete je li poslužitelj u kvaru. Ako da, napišite kod za spajanje na rezervni poslužitelj. Takva organizacija koda, korištenje "if" i "else" petlje nije učinkovita kada vaš kod ima višestruke java iznimke rukovati.

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

Pokušajte Catch Block

Java pruža ugrađeno izuzetno rukovanje.

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

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 spajanje na rezervni poslužitelj. U slučaju da poslužitelj radi, kôd u bloku CATCH bit će zanemaren. U slučaju da poslužitelj ne radi, pokreće se iznimka, a kod u catch bloku će se izvršiti.

Pokušajte Catch Block

Dakle, ovako se postupa s iznimkom Java.

Sintaksa za korištenje pokušaj i uhvati

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

Primjer

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 koristeći naredbu, java Javaizuzetak

Korak 3) Aritmetička iznimka – dijeljenje s nulom prikazano je kao dolje za liniju # 5, a linija # 6 se nikada ne izvršava

Korak 4) Sada da vidimo kako će nam try and catch pomoći u rješavanju ove iznimke. Iznimku koja uzrokuje redak koda stavit ćemo u a 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, prevedite i pokrenite kod. Dobit ćete sljedeći izlaz

Pokušajte Catch Block

Kao što vidite, iznimka se obrađuje, a posljednja linija koda također se izvršava. Također, imajte na umu da se linija #7 neće izvršiti jer čim se podigne iznimka, tok kontrole skače na catch blok.

Bilješka: Objekt AritmeticException "e" nosi informacije o iznimci koja se dogodila što može biti korisno u poduzimanju radnji oporavka.

Java Hijerarhija klase izuzetaka

Nakon što se izvrši jedna catch naredba, ostale se zaobilaze, a izvođenje se nastavlja nakon try/catch bloka. Ugniježđeni catch blokovi slijede hijerarhiju izuzetaka.


Java Hijerarhija izuzetaka

  • Sve iznimke klase u Java proširiti klasu 'Throwable'. Throwable ima dvije podklase, Error i Exception
  • Klasa Error definira iznimku ili probleme koji se ne očekuju u normalnim okolnostima u našem programu, na primjer pogreška memorije, pogreška hardvera, pogreška JVM-a itd.
  • Klasa Exception predstavlja iznimke koje naš program može obraditi, a naš se program može oporaviti od ove iznimke korištenjem bloka pokušaj i uhvati
  • Iznimka vremena izvođenja je potklasa klase iznimke. Iznimke ove vrste predstavljaju iznimke koje se javljaju u vrijeme izvođenja i koje se ne mogu pratiti u vrijeme kompajliranja. Izvrstan primjer istog je iznimka dijeljenja s nulom ili iznimka nultog pokazivača, itd
  • IO iznimka se generira tijekom ulaznih i izlaznih operacija
  • Prekinuti izuzeci u Java, generira se tijekom više niti.

Primjer: Razumjeti gniježđenje 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) Generirana je iznimka ArrayIndexOutOfBoundsException. Promijenite vrijednost int d na 0. Spremite, prevedite i pokrenite kod.

Korak 4) Mora se generirati ArithmeticException.

Korak 5) Odkomentirajte redak #10 u redak #12. Spremite, prevedite i pokrenite kod.

Korak 6) Pogreška kompilacije? To je zato što je Exception osnovna klasa ArithmeticException Exception. Svaka iznimka koju pokreće ArithmeticException također se može obraditi u klasi Exception. Dakle, catch blok ArithmeticException nikada neće dobiti priliku da se izvrši što ga čini suvišnim. Otuda greška u kompilaciji.

Java Konačno Blokiraj

Konačni blok je izvršava se bez obzira na pokrenutu iznimku u bloku pokušaja. to je opcionalno koristiti s blokom try.

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

  statement(s)

 } finally {

  statement(s)

 }

U slučaju da se u bloku try pokrene iznimka, blok finally se izvršava nakon što se izvede blok catch.

Primjer

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) Spremite, kompajlirajte i pokrenite kod.

Korak 3) Očekivani učinak. Finalni blok se izvršava iako je podignuta iznimka.

Korak 4) Promijenite vrijednost varijable d = 1. Spremite, prevedite i pokrenite kod i promatrajte izlaz. Dno obrasca

rezime

  • An Iznimka je pogreška u vremenu izvođenja što prekida normalan tijek izvođenja programa. Poremećaj tijekom izvođenja programa označava se kao pogreška ili iznimka.
  • Pogreške su razvrstane u dvije kategorije
    • Pogreške vremena kompajliranja – sintaktičke pogreške, semantičke pogreške
    • Pogreške tijekom izvođenja - iznimka
  • A robustan program trebao bi obraditi sve iznimke i nastaviti sa svojim normalnim tokom izvršavanja programa. Java pruža ugrađenu iznimnu metodu rukovanja
  • Rukovatelj iznimkama je skup koda koji obrađuje izuzetak. Iznimke se mogu rješavati Java koristeći pokušaj i uhvati.
  • Pokušajte blokirati: Normalan kod ide na ovaj blok.
  • Blok za hvatanje: Ako postoji greška u normalnom kodu, ona će ići u ovaj blok