Excepție bifată față de excepția Runtime
Excepțiile sunt tipurile speciale de evenimente, care pot perturba fluxul normal al programului. Numele de excepție provine din „eveniment excepțional”. Aruncarea unei excepții este procesul de creare a unui obiect de excepție și predarea acestuia către sistemul de execuție. Când sistemul de execuție primește obiectul de excepție, va încerca să găsească pe cineva care să îl gestioneze în stiva de apeluri, parcurgându-l în ordinea inversă (în care au fost apelate metodele). Sistemul de runtime are succes dacă găsește o metodă cu un handler de excepție. Handlerul de excepții este un bloc de cod care poate gestiona oficial excepția menționată. Dacă sistemul de runtime găsește un handler adecvat, acesta va transmite obiectul de excepție handler-ului. Aceasta se numește captarea excepției. Cu toate acestea, dacă excepția nu poate fi gestionată, programul se va termina. În Java,excepții moștenesc din clasa Throwable. Excepțiile bifate sunt excepții la care manipularea este impusă de compilator. Excepțiile de execuție sunt un tip de excepții, care nu sunt verificate de compilator.
Ce este o excepție verificată?
Excepțiile bifate sunt fie obiecte din clasa java.lang.exception sau subclasele sale (cu excepția java.lang. RuntimeException și subclasele sale). Excepțiile verificate sunt „verificate” la compilare. Asta înseamnă că programatorul trebuie să prindă sau să arunce aceste excepții, altfel compilarea s-ar plânge (provocând 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 vă asigura că toate posibilele IOExceptions sunt îngrijite de programator.
Ce este o excepție Runtime?
Excepțiile Runtime constau din java.lang. RuntimeException și toate subclasele sale. Teoretic vorbind, ele au același scop ca excepțiile verificate și pot fi aruncate sau tratate ca excepție verificată, dar tratarea acestora nu este impusă de compilator. Prin urmare, excepțiile Runtime aparțin familiei de excepții necontrolate. NullPointerException, NumberFormatEception, ClassCastException și ArrayIndexOutOfBoundsException sunt excepții comune de rulare în Java.
Care este diferența dintre excepția verificată și excepția Runtime?
Deși, atât excepțiile verificate, cât și excepțiile de rulare sunt apariții nedorite în timpul executării unui program, ele au diferențele lor. Gestionarea excepțiilor verificate este pusă în aplicare de către compilator, dar excepțiile runtime nu sunt. Prin urmare, excepțiile verificate trebuie să fie aruncate sau tratate pentru ca codul să poată fi compilat, dar nu există o astfel de cerință în ceea ce privește excepțiile de execuție. În consecință, excepțiile de execuție aparțin categoriei de excepții necontrolate, împreună cu erorile.
Dezavantajul cu excepțiile verificate este că programatorul trebuie să se descurce chiar dacă nu știe cum. Deci, dacă programatorul aruncă o nouă excepție fără a înfășura originalul, urmele stivei care aparțin excepției originale se vor pierde. Acesta este locul în care excepțiile de rulare sunt utile. 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 surprinse, nu există nicio surpriză pentru programator. Va ști întotdeauna ce excepție verificată ar putea fi aruncată printr-o anumită metodă. Contrar acestui lucru, pot fi aruncate diferite excepții în timpul rulării fără știrea programatorului.