Înțelegerea ierarhiei excepțiilor în Java explicată

Publicat: 2022-03-08

termenul „Excepție” este prescurtarea pentru „eveniment excepțional”. În Java, o excepție este în esență un eveniment care are loc în timpul execuției unui program și perturbă fluxul normal al programului. Excepțiile sunt nedorite și în cea mai mare parte neașteptate, care apar în general fie în timpul execuției, fie în timpul compilării. Toate aceste excepții trebuie gestionate pentru a se asigura că programul rulează în fluxul său natural.

Cu toate acestea, înainte de a gestiona excepțiile, ar fi de ajutor să știți ce tipuri diferite de excepții sunt prezente cu Java. Prin acest articol, să ne uităm la diferitele tipuri de excepții din Java și la ierarhia excepțiilor pe care o urmează.

Cuprins

Ierarhia excepțiilor în Java

Ierarhia Excepțiilor în limbajul de programare Java începe cu clasa Throwable – care provine din clasa Object și este subclasa sa directă, în timp ce clasa Exception prezintă toate aceste clase Throwable ramificate în două subclase – Error și Exception. Iată o diagramă pentru a înțelege mai bine ierarhia excepțiilor Java:

Clasa Exception prezintă toate excepțiile pe care ar putea fi necesar să le gestionați în timp ce lucrați cu limbajul de programare Java. Unele exemple cunoscute și întâlnite de astfel de excepții includ NullPointerException, ClassNotFoundException, IllegalArgumentException etc.

Pe de altă parte, clasa Error se ocupă de probleme mai grave din arhitectura programului Java și nu este luată în considerare în codul aplicației. Câteva exemple de erori în Java sunt InternalError, AssertionError, OutOfMemoryError etc.

Excepțiile în Java sunt împărțite în continuare în două categorii:

  • Excepții verificate – Acestea sunt, de asemenea, cunoscute ca excepții în timpul compilației.
  • Excepții neverificate – Acestea sunt cunoscute și ca excepții de rulare.

Un punct important de remarcat în acest moment este că excepțiile nebifate sunt toate subclasele clasei RuntimeException. Vom vorbi mai multe despre excepțiile verificate și neverificate mai târziu în acest articol. Dar înainte de asta, să ne uităm în esență la modul în care erorile și excepțiile diferă în funcționarea lor, astfel încât să nu existe confuzie.

Erori și excepții în Java - Cum diferă?

Documentația oficială a limbajului de programare Java se referă la erori ca apariții în timpul programării Java care – „indică probleme grave pe care o aplicație rezonabilă nu ar trebui să încerce să le surprindă”. Gravitatea erorilor este clară din modul în care această afirmație este gata. În mod clar, aceasta se referă la setul de probleme cu care s-ar putea confrunta programul dvs., din care nu este posibil să se recupereze fără a refactoriza codul sau a modifica arhitectura aplicației Java.

Să ne uităm la o metodă Java care va genera o eroare:

public static void print(Șir S) {

print(E);

}

În codul menționat mai sus, metoda print() acționează ca o metodă recursivă care continuă să se apeleze în mod repetat, din nou și din nou, până când atinge dimensiunea maximă permisă pentru o stivă de fire în Java. În acel moment, iese din execuție cu un foarte comun – StackOverflowError, care citește ceva de genul:

Excepție în firul „principal” java.lang.StackOverflowError

la StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)

După cum arată exemplul de mai sus, metoda aruncă un exemplu, dar această eroare nu poate fi gestionată în codul în sine. Deci, programul se oprește pur și simplu din execuție, deoarece daunele sunt irecuperabile. Ca o soluție, codul trebuie modificat.

Spre deosebire de Erori, Excepțiile indică condiții care pot fi surprinse de o aplicație rezonabilă. Excepțiile din Java includ probleme care pot apărea fie în timpul compilării, fie în timpul rulării. Aceste excepții apar destul de frecvent în toate aplicațiile – mai ales în timpul fazei de testare și depanare. Ca rezultat, excepțiile în Java pot fi gestionate în cadrul programului însuși pentru a se asigura că codul își rulează fluxul natural.

Acum, să vorbim puțin mai multe despre Ierarhia excepțiilor în Java, analizând ce sunt excepțiile bifate și nebifate.

Excepții verificate și nebifate în Java

După cum am menționat mai devreme, excepțiile într-un program Java se pot întâmpla fie în timpul compilării, fie în timpul rulării. Acesta este ceea ce ne oferă cele două tipuri mari de excepții prezente în Java. Iată aceste două excepții în detaliu.

Excepții în timpul compilării

Excepțiile care apar în momentul compilării sunt cunoscute ca excepții în timpul compilării. Acestea se mai numesc și excepții verificate din cauza faptului că trebuie să le verificați în mod explicit în programul Java și să le gestionați în codul în sine. Clase precum InterruptedException, IOException și altele sunt excepții verificate.

Să ne uităm la o metodă care poate gestiona o excepție verificată:

public void writeAFfile() {

încercați (BufferedWriter b_w = nou BufferedWriter(nou FileWriter(„myFile.txt”))) {

b_w.write(„Testare”);

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

După cum puteți vedea, există două declarații în blocul de încercare al codului de mai sus -

  • Instanțierea obiectului – BufferedWriter
  • Folosind obiectul pentru a scrie în fișier

Ambele declarații pot arunca IOException. IOException, fiind o excepție verificată, trebuie să fie gestionată fie de apelant, fie de metodă. În exemplul de mai sus, puteți vedea că excepția este gestionată în cadrul metodei în sine.

Excepții de rulare

Spre deosebire de excepțiile din timpul compilării care sunt aruncate în timpul compilării, excepțiile din timpul de execuție sau excepțiile neverificate pot fi aruncate „oricand”, ceea ce înseamnă în esență în timpul execuției. Ca urmare a acestui fapt, metodele nu trebuie să utilizeze în mod explicit blocuri catch-and-throw pentru a gestiona aceste excepții neverificate. Unele dintre clasele care moștenesc excepții de rulare neverificate includ – NullPointerException, ArithmeticException etc.

Să ne uităm la o bucată de cod Java care aruncă o excepție NullPointerException nebifată și care nu este tratată în fragmentul de cod, spre deosebire de mai devreme. Iată-l:

public void writeToFile() {

încercați (BufferedWriter b_w = null) {

b_w.write(„Test”);

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

Când apelați metoda de mai sus, programul va lansa o excepție NullPointerException, deoarece obiectul BufferedWriter este nul. Iată cum ar citi excepția:

Excepție în firul „principal” java.lang.NullPointerException

la IOExceptionExample.writeToFile(IOExceptionExample.java:10)

la IOExceptionExample.main(IOExceptionExample.java:17)

În concluzie

Cu asta, ajungem la sfârșitul acestui blog despre înțelegerea ierarhiei excepțiilor în Java. Vă rugăm să rețineți că aceasta nu este în niciun caz o acoperire completă a excepțiilor în Java și cum să le gestionați. Pentru asta, ar trebui să săpați mai adânc și să vă expuneți la diferite posibile excepții pentru a vedea cum funcționează. Cunoașterea gestionării excepțiilor vă va pregăti pentru o carieră de succes ca dezvoltator full-stack, deoarece excepțiile reprezintă elementele de bază ale oricărei aplicații.

La upGrad, avem un curs specializat de dezvoltare full stack – Program Executive PG în Dezvoltare Software – Specializare în Dezvoltare Full Stack – unde vă ghidăm prin toate nuanțele dezvoltării de software, concentrându-vă în principal pe dezvoltarea Full Stack. Vă sugerăm să consultați cursul și probabil să vă rezervați un loc în curând!

1. Ce clasă este prezentă în partea de sus a Ierarhiei de excepții în Java?

Clasa Throwable se află în vârful ierarhiei de excepții în Java.

2. Care sunt diferitele tipuri de excepții prezente în Java?

Java a debifat și a verificat excepții. Excepțiile verificate sunt, de asemenea, numite excepții în timpul compilării, în timp ce excepțiile necontrolate sunt cunoscute și ca excepții în timpul execuției.

3. Cum sunt gestionate excepțiile în Java?

try-catch este cel mai simplu mod de a gestiona excepțiile în Java. Piesa principală de cod pe care doriți să o rulați trebuie să fie pusă în blocul try, în timp ce unul sau mai multe blocuri catch vor prinde toate excepțiile pe care le aruncă codul. Această metodă va detecta orice tip de excepții Java care sunt aruncate.