Tratarea excepțiilor în Java

În ce este Excepția Java?

Excepție în Java este un eveniment care întrerupe execuția instrucțiunilor de program și perturbă fluxul normal de execuție a programului. Este un obiect care include informații despre un eveniment de eroare care a avut loc într-o metodă și este transmisă sistemului de rulare. În Java, excepțiile sunt utilizate în principal pentru a indica diferite tipuri de condiții de eroare.

Există două tipuri de erori:

  1. Erori de timp de compilare
  2. Erori de rulare

Erorile de timp de compilare pot fi din nou clasificate în două tipuri:

  • Erori de sintaxă
  • Erori semantice

Exemplu de erori de sintaxă:

În loc să declare int a; ai declarat din greșeală ca in a; pentru care compilatorul va arunca o eroare.

Exemplu: ați declarat o variabilă int a; iar după câteva rânduri de cod declari din nou un număr întreg ca int a;. Toate aceste erori sunt evidențiate atunci când compilați codul.

Exemplu de erori de rulare

O eroare de rulare se numește an excepţii de eroare. Este orice eveniment care întrerupe fluxul normal de execuție a programului. Exemple de excepții sunt excepția aritmetică, excepția Nullpointer, excepția Împărțire la zero etc. Excepții în Java sunt ceva care este în afara controlului dezvoltatorilor.

Clic aici dacă videoclipul nu este accesibil

De ce avem nevoie de Exception?

Să presupunem că ați codificat un program pentru a accesa serverul. Lucrurile au funcționat bine în timp ce dezvoltați codul.

Java Manipularea excepție

În timpul producției efective, serverul este oprit. Când programul dvs. a încercat să îl acceseze, se ridică o excepție.

Java Manipularea excepție

Cum să gestionezi excepția

Până acum am văzut, excepția este dincolo de controlul dezvoltatorului. Dar învinovățirea eșecului codului pe probleme de mediu nu este o soluție. Ai nevoie de o Programare Robustă, care se ocupă de situații excepționale. Un astfel de cod este cunoscut ca Handler de excepții.

În exemplul nostru, o bună gestionare a excepțiilor ar fi, când serverul este oprit, conectați-vă la serverul de rezervă.

Java Manipularea excepție

Pentru a implementa acest lucru, introduceți codul pentru a vă conecta la server (folosind condiții tradiționale dacă și altfel). Veți verifica dacă serverul nu este în stare de funcționare. Dacă da, scrieți codul pentru a vă conecta la serverul de rezervă. O astfel de organizare a codului, folosind bucla „if” și „else” nu este eficientă atunci când codul dvs. are mai multe excepții java a manevra.

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

Încercați Catch Block

Java oferă o manevrabilitate excepțională încorporată.

  1. Codul normal intră în a ÎNCERCAȚI bloc.
  2. Codul de gestionare a excepțiilor intră în CAPTURĂ bloca

Încercați Catch Block

În exemplul nostru, blocul TRY va conține codul de conectare la server. Blocul CATCH va conține codul de conectare la serverul de rezervă. În cazul în care serverul este activ, codul din blocul CATCH va fi ignorat. În cazul în care serverul este oprit, se ridică o excepție, iar codul din blocul catch va fi executat.

Încercați Catch Block

Deci, așa este tratată excepția Java.

Sintaxă pentru utilizarea try & catch

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

Exemplu

Pas 1) Copiați următorul cod într-un 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");
   }
}

Pas 2) Salvați fișierul și compilați codul. Rulați programul folosind comanda, java JavaExcepție

Pas 3) O excepție aritmetică – împărțirea la zero este afișată mai jos pentru linia # 5 și linia # 6 nu este niciodată executată

Pas 4) Acum haideți să vedem cum ne va ajuta try and catch să gestionăm această excepție. Vom pune excepția care provoacă linia de cod în a încerca bloc, urmat de a captură bloc. Copiați următorul cod în 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");
 }
}

Pas 5) Salvați, compilați și rulați codul. Veți obține următorul rezultat

Încercați Catch Block

După cum observați, excepția este gestionată și ultima linie de cod este, de asemenea, executată. De asemenea, rețineți că linia #7 nu va fi executată deoarece de îndată ce se ridică o excepție fluxul de control sare la blocul de captare.

Notă: Obiectul AritmeticException „e” conține informații despre excepția care a avut loc, care pot fi utile în acțiuni de recuperare.

Java Clasa de excepție Ierarhie

După ce se execută o instrucțiune catch, celelalte sunt ocolite, iar execuția continuă după blocul try/catch. Blocurile de captură imbricate urmează ierarhia de excepție.


Java Ierarhie de excepție

  • Toate clasele de excepție în Java extindeți clasa „Throwable”. Throwable are două subclase, Error și Exception
  • Clasa Error definește excepția sau problemele care nu se așteaptă să apară în circumstanțe normale de către programul nostru, de exemplu eroare de memorie, eroare hardware, eroare JVM etc.
  • Clasa Exception reprezintă excepțiile care pot fi gestionate de programul nostru, iar programul nostru poate fi recuperat din această excepție folosind blocul try and catch
  • O excepție Runtime este o subclasă a clasei de excepție. Excepția de acest tip reprezintă excepția care apare în timpul rulării și care nu poate fi urmărită în momentul compilării. Un exemplu excelent de același lucru este excepția împărțirea la zero sau excepția pointerului nul etc
  • Excepția IO este generată în timpul operațiunilor de intrare și ieșire
  • Excepții întrerupte în Java, este generat în timpul firelor multiple.

Exemplu: Pentru a înțelege cuibărirea blocurilor de încercare și prindere

Pas 1) Copiați următorul cod într-un 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");
 }
}

Pas 2) Salvați fișierul și compilați codul. Rulați programul folosind comanda, Java JavaExcepție.

Pas 3) Este generată o excepție ArrayIndexOutOfBoundsException. Schimbați valoarea int d la 0. Salvați, compilați și rulați codul.

Etapa 4) Trebuie generată o excepție ArithmeticException.

Pas 5) Decomentați rândul #10 la rândul #12. Salvați, compilați și rulați codul.

Pas 6) Eroare de compilare? Acest lucru se datorează faptului că Exception este clasa de bază a ArithmeticException Exception. Orice excepție care este ridicată de ArithmeticException poate fi gestionată și de clasa Exception. Deci blocul catch al ArithmeticException nu va avea niciodată șansa de a fi executat, ceea ce îl face redundant. De aici eroarea de compilare.

Java În sfârșit Block

Blocul în sfârșit este executat indiferent de ridicarea unei excepții în blocul try. Este facultativ de utilizat cu un bloc try.

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

  statement(s)

 } finally {

  statement(s)

 }

În cazul în care se ridică o excepție în blocul try, în cele din urmă blocul este executat după ce blocul catch este executat.

Exemplu

Pas 1) Copiați următorul cod într-un 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");
  }
}
}

Pas 2) Salvați, compilați și rulați codul.

Pas 3) Rezultat așteptat. În cele din urmă, blocul este executat chiar dacă este ridicată o excepție.

Pas 4) Schimbați valoarea variabilei d = 1. Salvați, compilați și rulați codul și observați rezultatul. Partea de jos a formularului

Rezumat

  • An Excepția este o eroare de rulare care întrerupe fluxul normal de execuție a programului.Întreruperea în timpul execuției programului este denumită eroare sau excepție.
  • Erorile sunt clasificate în două categorii
    • Erori de timp de compilare – erori de sintaxă, erori semantice
    • Erori de rulare - Excepție
  • A programul robust ar trebui să se ocupe de toate excepțiile și continuă cu fluxul său normal de execuție a programului. Java oferă o metodă de manipulare excepțională încorporată
  • Exception Handler este un set de cod care se ocupă de o excepție. Excepțiile pot fi gestionate în Java folosind try & catch.
  • Încercați să blocați: Codul normal merge pe acest bloc.
  • Blocul de prindere: Dacă există o eroare în codul normal, atunci acesta va intra în acest bloc