MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Crearea propriilor clase de excepții

Deși clasele de excepții din biblioteca standard Java acoperă majoritatea situațiilor excepționale care pot apărea în timpul execuției unui program, uneori este necesar să creăm propriile clase de excepții cu logica noastră specifică.

Pentru a crea o clasă proprie de excepții, trebuie să o moștenim de la clasa Exception. De exemplu, avem o clasă care calculează factorialul, și trebuie să aruncăm o excepție specială dacă numărul transmis metodei este mai mic de 1:

class Factorial {

   public static int getFactorial(int num) throws FactorialException {
   
       int result = 1;
       if (num < 1) throw new FactorialException("Numărul este mai mic de 1", num);
       
       for (int i = 1; i <= num; i++) {
           result *= i;
       }
       return result;
   }
}

class FactorialException extends Exception {

   private int number;
   public int getNumber() { return number; }
   public FactorialException(String message, int num) {
   
       super(message);
       number = num;
   }
}

În acest exemplu, pentru a defini o eroare legată de calculul factorialului, a fost creată clasa FactorialException, care extinde Exception și conține toate informațiile necesare despre calcul. În constructorul FactorialException, mesajul de eroare este transmis constructorului clasei de bază Exception: super(message). În plus, un câmp separat este folosit pentru a stoca numărul pentru care se calculează factorialul.

Pentru a genera excepția în metoda de calcul al factorialului, se folosește operatorul throw: throw new FactorialException("Numărul nu poate fi mai mic de 1", num). Deoarece excepția nu este gestionată cu try..catch, o delegăm metodei apelante folosind operatorul throws: public static int getFactorial(int num) throws FactorialException.

Acum putem folosi această clasă în metoda main:

public static void main(String[] args) {
       
   try {
       int result = Factorial.getFactorial(6);
       System.out.println(result);
   }
   catch (FactorialException ex) {
       System.out.println(ex.getMessage());
       System.out.println(ex.getNumber());
   }
}
← Lecția anterioară Lecția următoare →