TEMA 4. POO EXCEPTII JAVA. TRATAREA EXCEPTIILOR | Page 6

Checked exceptions, ce corespund clasei Exception:  O aplicaţie bine scrisă ar trebui să le prindă, şi să permită continuarea rulării programului.  Să luăm ca exemplu un program care cere utilizatorului un nume de fişier (pentru a-l deschide). În mod normal, utilizatorul va introduce un nume de fişier care există şi care poate fi deschis. Există insă posibilitatea ca utilizatorul să greşească, caz în care se va arunca o excepţie FileNotFoundException.  Un program bine scris va prinde această excepţie, va afişa utilizatorului un mesaj de eroare, şi îi va permite eventual să reintroducă un nou nume de fişier. Errors, ce corespund clasei Error:  Acestea definesc situaţii excepţionale declanşate de factori externi aplicaţiei, pe care aceasta nu le poate anticipa şi nu-şi poate reveni, dacă se produc.  Spre exemplu, alocarea unui obiect foarte mare (un vector cu milioane de elemente), poate arunca OutOfMemoryError.  Aplicaţia poate încerca să prindă această eroare, pentru a anunţa utilizatorul despre problema apărută; după această însă, programul va eşua (afişând eventual stack trace). Runtime Exceptions, ce corespund clasei RuntimeException:  Ca şi erorile, acestea sunt condiţii excepţionale, însă spre deosebire de erori, ele sunt declanşate de factori interni aplicaţiei. Aplicaţia nu poate anticipa, şi nu îşi poate reveni dacă acestea sunt aruncate.  Runtime exceptions sunt produse de diverse bug-uri de programare (erori de logică în aplicaţie, folosire necorespunzătoare a unui API, etc).  Spre exemplu, a realiza apeluri de metode sau membri pe un obiect null va produce NullPointerException. Fireşte, putem prinde excepţia. Mai natural însă ar fi să eliminăm din program un astfel de bug care ar produce excepţia. Excepţiile CHECKED sunt cele prinse de blocurile try-catch. Toate excepţiile sunt CHECKED cu excepţia celor de tip Error, RuntimeException şi subclasele acestora, adica cele de tip UNCHECKED. Nu este indicată prinderea excepţiilor UNCHECKED (de tip Error sau RuntimeException) cu try-catch. Putem arunca RuntimeException fără să o menţionăm în clauza throws din antet: public void f(Object o) { if (o == null) throw new NullPointerException("o is null"); }