Tratarea excepțiilor în Java
⚡ Rezumat inteligent
Java Gestionarea excepțiilor oferă un mecanism structurat pentru gestionarea erorilor de execuție care perturbă fluxul normal al programului. Folosește cuvintele cheie try, catch, finally, throw și throws pentru a detecta, izola și recupera din condiții excepționale, păstrând în același timp...ping aplicații robuste și previzibile.
Ce este o excepție în Java?
An Excepție în Java este un eveniment care întrerupe execuția instrucțiunilor programului și perturbă fluxul normal de execuție a programului. Este un obiect care încapsulează informațiile despre un eveniment de eroare care au apărut în cadrul unei metode și le transmite sistemului de execuție. În Java, excepțiile sunt folosite în principal pentru a semnala diferite tipuri de condiții de eroare, astfel încât dezvoltatorii să poată răspunde la acestea într-un mod controlat.
Există două mari categorii de erori în Java:
- Erori de timp de compilare
- Erori de rulare
Erorile la compilare pot fi clasificate în două tipuri suplimentare:
- 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 genera o eroare.
Exemplu de erori semantice: Ai 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 execuție este denumită o ExcepțieEste orice eveniment care întrerupe fluxul normal de execuție a programului. Exemple de excepții includ excepția aritmetică, NullPointerException, excepția de împărțire la zero și multe altele. Excepții în Java sunt condiții care adesea nu se află sub controlul direct al dezvoltatorului.
Clic aici dacă videoclipul nu este accesibil
De ce avem nevoie de gestionarea excepțiilor?
Să presupunem că ați programat un program pentru a accesa un server. Lucrurile funcționează bine în timp ce dezvoltați.ping codul într-un mediu local cu condiții controlate.
În timpul unei rulări de producție efective, serverul poate fi nefuncțional. Când programul încearcă să îl acceseze, este generată o excepție și, fără o gestionare adecvată, programul se va termina brusc.
Cum se gestionează o excepție în Java
Până acum am văzut că o excepție este adesea în afara controlului unui dezvoltator. Cu toate acestea, a da vina pe probleme de mediu pentru eșecul codului nu este o soluție reală. Aveți nevoie de o programare robustă care să aibă grijă de situații excepționale. Un astfel de cod este cunoscut sub numele de Tratament de excepții.
În exemplul nostru, o bună gestionare a excepțiilor ar însemna că, atunci când serverul principal este nefuncțional, programul se conectează automat la un server de rezervă.
Pentru a implementa acest lucru, puteți scrie cod pentru conectarea la server folosind condițiile tradiționale if și else. Veți verifica dacă serverul este nefuncțional și, dacă da, veți scrie cod pentru conectarea la serverul de rezervă. O astfel de organizare a codului folosind ramificații „if” și „else” nu este eficientă atunci când codul dvs. are mai multe ramificații. Java excepții a manevra.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Încercați blocul Catch în Java
Java oferă un mecanism încorporat de gestionare a excepțiilor care separă logica normală de logica de recuperare în caz de erori.
- Codul normal intră în a ÎNCERCAȚI bloc.
- Codul de gestionare a excepțiilor intră în CAPTURĂ bloc.
În exemplul nostru, blocul TRY va conține codul pentru conectarea la server. Blocul CATCH va conține codul pentru conectarea la serverul de rezervă. În cazul în care serverul este activ, codul din blocul CATCH va fi ignorat. În cazul în care serverul este nefuncțional, se generează o excepție și se va executa codul din blocul catch.
Deci, așa este gestionată o excepție în Java.
Sintaxa pentru utilizarea try și catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Exemplu de bloc Try Catch
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țită la zero, este afișată pentru linia 5, iar linia 6 nu este niciodată executată.
Pas 4) Acum să examinăm cum ne vor ajuta metodele try și catch să gestionăm această excepție. Vom plasa linia de cod care cauzează excepția într-un î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.
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 ArithmeticException „e” conține informații despre excepția care a apărut, ceea ce poate fi util la întreprinderea de acțiuni de recuperare.
Java Ierarhia claselor de excepție
După ce se execută o instrucțiune catch, celelalte sunt ocolite, iar execuția continuă după blocurile try și catch. Blocurile catch imbricate trebuie să urmeze ierarhia excepțiilor de la cea mai specifică subclasă până la cea mai generală clasă părinte.
- Toate clasele de excepție în Java extindeți clasa Throwable. Throwable are două subclase, Error și Exception.
- Clasa Error definește excepțiile sau problemele care nu se așteaptă să apară în circumstanțe normale în programul dumneavoastră, de exemplu, eroare de memorie, eroare hardware sau eroare JVM.
- Clasa Exception reprezintă excepțiile care pot fi gestionate de programul dumneavoastră, iar programul poate recupera aceste excepții folosind blocurile try și catch.
- O RuntimeException este o subclasă a clasei Exception. Excepțiile de acest tip reprezintă excepții neverificate care apar în timpul execuției și nu pot fi detectate la momentul compilării. Exemple bune includ excepția de împărțire la zero și excepția de indicator nul.
- IOException este generată în timpul operațiunilor de intrare și ieșire.
- Excepție întreruptă în Java este generat în timpul operațiilor multithreaded atunci când un fir de execuție este întrerupt.
Exemplu: Imbricarea blocurilor try și catch
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) Se generează o excepție ArrayIndexOutOfBounds. Schimbați valoarea lui int d la 0. Salvați, compilați și rulați codul.
Pas 4) Trebuie generată o ArithmeticException.
Pas 5) Eliminați comentariile de la linia 10 la linia 12. Salvați, compilați și rulați codul.
Pasul 6) Eroare de compilare? Acest lucru se datorează faptului că Exception este clasa de bază a ArithmeticException. Orice excepție generată de ArithmeticException poate fi, de asemenea, gestionată de clasa Exception. Deci, blocul catch al ArithmeticException nu va avea niciodată șansa de a se executa, ceea ce îl face redundant. De aici și 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. Blocul finally este locul potrivit pentru a elibera resurse precum conexiuni la baza de date, fișiere sau socketuri de rețea.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Dacă este generată o excepție în blocul try, blocul finally este executat după finalizarea blocului catch.
Exemplu de bloc finally
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) Rezultatul așteptat: Blocul finally este executat chiar dacă este generată o excepție.
Pas 4) Schimbați valoarea variabilei d = 1. Salvați, compilați și rulați codul și observați rezultatul.
Cele mai bune practici pentru Java Manipularea excepție
Respectarea câtorva reguli dovedite vă va ajuta să vă mențineți Java cod rezistent, lizibil și ușor de depanat:
- Detectează mai întâi excepția cea mai specifică, apoi pe cele mai generale, pentru a păstra integritatea ierarhiei excepțiilor.
- Evitați blocurile catch goale. Înregistrați cel puțin excepția pentru ca cauza principală să nu se piardă niciodată.
- Folosește blocul finally sau try with resources pentru a elibera fișiere, socket-uri și conexiuni la baza de date.
- Lansează excepții verificate doar atunci când apelantul poate recupera în mod rezonabil și folosește excepții neverificate pentru erorile de programare.
- Încadrați excepțiile de nivel scăzut într-o excepție de business semnificativă pentru a menține controlul API-ului.trace curat.
- Nu înghiți niciodată InterruptedException în tăcere în codul multithreaded, restaurează în schimb flag-ul de întrerupere.








