Prelucrarea excepțiilor
În tema Introducere în gestionarea excepțiilor au fost discutate câteva aspecte de bază ale gestionării excepțiilor. Acum vom vorbi mai detaliat despre alte aspecte legate de prelucrarea excepțiilor.
Operatorul throws
Uneori, o metodă care poate genera o excepție nu o gestionează ea însuși. În acest caz, se folosește operatorul throws în declarația metodei, indicând că excepția trebuie gestionată la apelul metodei. De exemplu, avem o metodă pentru calculul factorialului, și trebuie să gestionăm situația în care metoda primește un număr mai mic de 1:
public static int getFactorial(int num) throws Exception {
if (num < 1) throw new Exception("Numărul este mai mic de 1");
int result = 1;
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}
Cu ajutorul operatorului throw, excepția este aruncată în funcție de condiție. În același timp, metoda nu gestionează singură această excepție folosind try..catch, așa că în definiția metodei se folosește expresia throws Exception.
Acum, la apelul metodei, trebuie neapărat să gestionăm excepția aruncată:
public static void main(String[] args) {
try {
int result = getFactorial(-6);
System.out.println(result);
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
Fără tratarea excepției, va apărea o eroare de compilare și nu vom putea compila programul.
Ca alternativă, am putea să nu folosim operatorul throws și să gestionăm excepția direct în metodă:
public static int getFactorial(int num) {
int result = 1;
try {
if (num < 1) throw new Exception("Numărul este mai mic de 1");
for (int i = 1; i <= num; i++) {
result *= i;
}
}
catch (Exception ex) {
System.out.println(ex.getMessage());
result = num;
}
return result;
}