Diferența dintre excepția verificată și excepția de rulare

Diferența dintre excepția verificată și excepția de rulare
Diferența dintre excepția verificată și excepția de rulare

Video: Diferența dintre excepția verificată și excepția de rulare

Video: Diferența dintre excepția verificată și excepția de rulare
Video: Relative Velocity - Basic Introduction 2024, Noiembrie
Anonim

Excepție verificată vs Excepție de rulare

Excepțiile sunt tipuri speciale de evenimente, care pot perturba fluxul normal al programului. Excepția de nume vine de la „eveniment excepțional”. Aruncarea unei excepții este procesul de creare a unui obiect excepție și de transmitere a acestuia către sistemul de rulare. Când sistemul runtime primește obiectul excepție, va încerca să găsească pe cineva care să-l gestioneze în stiva de apeluri, parcurgându-l în ordine inversă (în care au fost apelate metodele). Sistemul runtime are succes dacă găsește o metodă cu un handler de excepții. Managerul de excepții este un bloc de cod care poate gestiona în mod oficial excepția menționată. Dacă sistemul de execuție găsește un handler adecvat, acesta va transmite obiectul excepție handler-ului. Aceasta se numește prinderea excepției. Cu toate acestea, dacă excepția nu poate fi gestionată, programul se va închide. În Java, excepțiile moștenesc din clasa Throwable. Excepțiile verificate sunt excepții pentru care manipularea este impusă de compilator. Excepțiile de rulare sunt un tip de excepții, care nu sunt verificate de compilator.

Ce este o excepție bifată?

Checked Excepțiile sunt fie obiecte ale clasei java.lang.exception, fie subclasele acesteia (cu excepția java.lang. RuntimeException și subclasele sale). Excepțiile verificate sunt „verificate” în timpul compilării. Aceasta înseamnă că programatorul trebuie fie să prindă, fie să arunce aceste excepții, altfel compilarea s-ar plânge (care provoacă o eroare a compilatorului). Din acest motiv, multe excepții verificate sunt foarte bine cunoscute de programatori. De exemplu, IOException și subclasele sale sunt excepții verificate și ori de câte ori programatorul are de-a face cu accesarea sau modificarea unui fișier, compilatorul verifică pentru a se asigura că toate IOExcepțiile posibile sunt îngrijite de programator.

Ce este o excepție de rulare?

Excepțiile Runtime constau din java.lang. RuntimeException și toate subclasele sale. Teoretic vorbind, ele servesc aceluiași scop ca și excepțiile verificate și pot fi aruncate sau gestionate ca o excepție verificată, dar gestionarea lor nu este impusă de compilator. Prin urmare, excepțiile Runtime aparțin familiei excepțiilor neverificate. NullPointerException, NumberFormatEception, ClassCastException și ArrayIndexOutOfBoundsException sunt excepții comune de rulare în Java.

Care este diferența dintre excepția verificată și excepția de rulare?

Deși atât excepțiile verificate, cât și excepțiile de rulare sunt apariții nedorite în timpul execuției unui program, ele au diferențele lor. Gestionarea excepțiilor verificate este impusă de compilator, dar excepțiile de rulare nu sunt. Prin urmare, excepțiile verificate trebuie să fie aruncate sau gestionate pentru ca codul să fie compilat, dar nu există o astfel de cerință cu privire la excepțiile de rulare. În consecință, excepțiile de rulare aparțin categoriei de excepții nebifate împreună cu erorile.

Dezavantajul, cu excepțiile bifate, este că programatorul trebuie să se ocupe de asta chiar dacă nu știe cum. Deci, dacă programatorul doar lansează o nouă excepție fără a încheia originalul, urma stivei care aparține excepției originale se va pierde. Aici sunt utile excepțiile de rulare. Deoarece toate excepțiile de rulare pot fi gestionate într-un singur loc, astfel programatorii pot scrie mai puțină cantitate de cod. Pe de altă parte, deoarece excepțiile verificate trebuie prinse, nu este nicio surpriză pentru programator. Ea va ști întotdeauna ce excepție verificată ar putea fi aruncată printr-o anumită metodă. Spre deosebire de aceasta, pot fi lansate diverse excepții de rulare fără știrea programatorului.

Recomandat: