Erori și excepții

Tipuri de date și excepții în Java

Jim White

Java Developer

Excepții vs. erori

  • Error reprezintă o problemă gravă
  • Aplicațiile nu pot gestiona și recupera din erori
    • Erorile provoacă „blocarea" sau oprirea aplicației
    • Exemplu: lipsa memoriei este o eroare în Java
  • Aplicațiile pot gestiona și recupera din excepții
    • Accesarea unui element în afara limitelor array-ului este o excepție.
Tipuri de date și excepții în Java
Exemplu de eroare
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Tipuri de date și excepții în Java

Două tipuri de excepții

Excepție verificată Excepție de rulare („neverificată")
Necesită gestionare Da Nu
Cauză generală Factori externi Erori de programare
Recuperare De obicei posibilă dacă este anticipată De obicei imposibilă
Mecanism de recuperare try/catch sau throws Cod scris cu atenție pentru evitare
Exemplu Fișier negăsit Index array în afara limitelor
Tipuri de date și excepții în Java

Excepții verificate și de rulare

  • Subclasele Exception care nu sunt și subclase ale RuntimeException sunt excepții verificate
    • Trebuie gestionate
    • Ex: fișier negăsit (FileNotFoundException)
  • RuntimeException este superclasa tuturor excepțiilor neverificate
    • Nu necesită gestionare
    • Ex: accesarea unui index inexistent (IndexOutOfBoundsException)
    • Ex: împărțire la zero (ArithmeticException)
Tipuri de date și excepții în Java

RuntimeException

Subclasă RuntimeException Descriere
ArithmeticException Calcule aritmetice incorecte, ex. împărțire la 0
IndexOutOfBoundsException Index utilizat pe un array, String etc. este în afara intervalului
NegativeArraySizeException Creare de array cu dimensiune negativă
int y = 5/0; // ArithmeticException causing code
int[] list = new int[-1];  //NegativeArraySizeException causing code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Tipuri de date și excepții în Java

Excepție „verificată"

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Tipuri de date și excepții în Java

Să exersăm!

Tipuri de date și excepții în Java

Preparing Video For Download...