Aruncarea excepțiilor

Tipuri de date și excepții în Java

Jim White

Java Developer

Opțiuni de gestionare

  • Excepțiile verificate necesită „gestionare"
    • Gestionarea excepțiilor de rulare este opțională
  • Două opțiuni pentru „gestionare"
    • Folosiți try/catch pentru a captura Exception și a trata problema
    • „Aruncați" excepția
  • Try/catch este metoda preferată
    • Nu este întotdeauna posibil; uneori e mai bine să centralizați gestionarea
Tipuri de date și excepții în Java

Cuvântul cheie throws

  • Folosiți throws pe orice metodă pentru a pasa excepția metodei apelante
    • În loc să gestionați excepția în metodă
    • Numit „aruncarea excepției" sau „pasarea responsabilității"
    • Responsabilitatea gestionării este transferată apelantului
  • Folosiți o listă separată prin virgulă după throws
    • Indică tipurile de excepții pe care metoda apelantă le poate anticipa
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Tipuri de date și excepții în Java
Exemplu throws

Try-catch obișnuit pentru a gestiona o Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oops - trying to get non-existent item");
  }
}

Throws pentru a gestiona o Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Tipuri de date și excepții în Java

Când să folosiți throws

  • „Pasarea responsabilității" este o practică de evitat
    • De obicei, este mai bine să gestionați excepțiile acolo unde apar
  • Motive pentru throws în loc de try-catch:
    • Metoda unde apare excepția poate să nu știe cum să o rezolve
    • Centralizarea gestionării pentru a reduce codul redundant try/catch

Aruncarea excepțiilor este utilizată de obicei cu excepții personalizate

1 Photo from https://unsplash.com/@philipparosetite
Tipuri de date și excepții în Java

Captură și rearuncarea

  • O Exception poate fi "rearuncată"
    • O metodă apelantă folosește throws în loc de try/catch
  • Rearuncarea din main va opri aplicația

Excepțiile pot fi rearuncate către metodele apelante

Tipuri de date și excepții în Java

Exemplu de rearuncarea

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oops - tried a bad quotient");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Tipuri de date și excepții în Java

Să exersăm!

Tipuri de date și excepții în Java

Preparing Video For Download...