Junior
Ako správne hádzať výnimky v Jave?
sobes.tech AI
Odpoveď od AI
Výnimky by mali byť vyvolané, keď nastane nestandardná situácia, ktorá narušuje normálne vykonávanie programu a vyžaduje okamžitú spracovanie.
Základné princípy:
- Používajte výnimky na hlásenie chýb, nie na riadenie toku programu.
- Vyberte najvhodnejší typ výnimky zo štandardnej knižnice.
- Vytvárajte vlastné triedy výnimiek, ak štandardné neposkytujú dostatok informácií.
- Do správy výnimky zahrňte podrobné informácie o príčine chyby, vrátane kontextu.
- Nezachytávajte výnimky, ktoré nemôžete správne spracovať. Je lepšie ich propagovať vyššie v zásobníku volaní.
- Používajte bloky
try-with-resourcesna automatické zatváranie zdrojov. - Zaznamenávajte výnimky, ktoré spracovávate alebo propagujete na vyššiu úroveň.
Správna syntax: throw new MyException("Chybová správa");
Príklad:
// Vytvorenie vlastnej výnimky
public class InvalidParameterException extends Exception {
public InvalidParameterException(String message) {
super(message);
}
}
// Metóda, ktorá vyvolá výnimku
public int divide(int a, int b) throws InvalidParameterException {
if (b == 0) {
throw new InvalidParameterException("Delenie nulou nie je povolené");
}
return a / b;
}
// Použitie metódy a spracovanie výnimky
public void performDivision(int x, int y) {
try {
int result = divide(x, y);
System.out.println("Výsledok: " + result);
} catch (InvalidParameterException e) {
// Záznam chyby
System.err.println("Chyba pri delení: " + e.getMessage());
// Možná ďalšia spracovanie alebo propagácia
}
}
Rozdiely medzi Checked a Unchecked výnimkami:
| Typ výnimky | Dedí od | Vyžaduje spracovanie/dokumentáciu | Príklad |
|---|---|---|---|
| Checked | Exception (okrem RuntimeException) |
Áno (try-catch alebo throws) |
IOException, SQLException |
| Unchecked | RuntimeException |
Nie (kompilátor to nevyžaduje) | NullPointerException, ArrayIndexOutOfBoundsException |