Vyjímky v Javě PDF

Summary

This document describes exceptions in Java, covering topics such as checked and unchecked exceptions, error handling using try-catch-finally blocks, and creating custom exceptions. It also explains how to throw exceptions and use assertions in Java.

Full Transcript

Vyjímky v Javě Defenzivní programování: Přístup k programování, který se zaměřuje na minimalizaci chyb a problémů tím, že se předpokládá, že chyby mohou nastat a že je třeba je zpracovat. Co je to výjimka? Výjimka je událost, která narušuje normální tok programu. V Javě jsou výjimky objekty, které...

Vyjímky v Javě Defenzivní programování: Přístup k programování, který se zaměřuje na minimalizaci chyb a problémů tím, že se předpokládá, že chyby mohou nastat a že je třeba je zpracovat. Co je to výjimka? Výjimka je událost, která narušuje normální tok programu. V Javě jsou výjimky objekty, které jsou instancemi třídy Throwable. Existují tři hlavní typy výjimek: Kontrolované výjimky (checked exceptions): Tyto výjimky jsou kontrolovány kompilátorem. Musíte je buď zpracovat pomocí bloku try-catch , nebo je deklarovat v metodě pomocí klauzule throws. Kontrolované vyjímky jsou podřída třídy Exception.Příkladem kontrolované výjimky je IOException. Nekontrolované výjimky (unchecked exceptions): Tyto výjimky nejsou kontrolovány kompilátorem. Nekotrolované vyjímky jsou podtřídou třídy RuntimeException. Patří sem například NullPointerException , ArrayIndexOutOfBoundsException a ArithmeticException. Tyto výjimky obvykle signalizují chybu v logice programu a měly by být opraveny, nikoli zachycovány. Pokud nejsou zachyceny v kódu, program se ukončí. Chyby (errors): Tyto výjimky signalizují závažné problémy, které obvykle nelze vyřešit. Například OutOfMemoryError nebo StackOverflowError. Tyto výjimky by měly být považovány za fatální a program by měl být ukončen. (Chyby by nikdy neměly být zachycovány!) Hierarchie vyjímek v Javě V Javě existuje hierarchie výjimek, která začíná třídou Throwable. Z ní dědí dvě hlavní třídy: Error a Exception. Třída Exception má další podtřídy, které zahrnují kontrolované a nekontrolované výjimky. Jak fungují výjimky v Javě? V Javě se výjimky zpracovávají pomocí bloků try , catch a finally. Když dojde k výjimce, program přestane vykonávat aktuální blok kódu a přejde do bloku catch , který odpovídá typu výjimky. Blok finally se vykoná vždy, bez ohledu na to, zda došlo k výjimce nebo ne. public class ExceptionExample { public static void main(String[] args) { try { int result = 10 / 0; // Zde dojde k ArithmeticException } catch (ArithmeticException e) { System.out.println("Došlo k dělení nulou: " + e.getMessage()); } finally { System.out.println("Tento blok se vykoná vždy."); } } } Vytváření vlastních výjimek V Javě můžete vytvářet vlastní výjimky tím, že vytvoříte třídu, která dědí z třídy Exception nebo RuntimeException. Můžete také přidat konstruktory pro předání zprávy nebo příčiny výjimky. public class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } public MyCustomException(String message, Throwable cause) { super(message, cause); } } Použití vlastní výjimky v kódu: public class CustomExceptionExample { public static void main(String[] args) { try { throw new MyCustomException("Toto je vlastní výjimka."); } catch (MyCustomException e) { System.out.println("Zachycena vlastní výjimka: " + e.getMessage()); } } } Zpracování více výjimek Pokud chcete zpracovat více různých typů výjimek, můžete použít více bloků catch nebo jeden blok catch s vícero typy výjimek oddělenými symbolem |. public class MultipleExceptionsExample { public static void main(String[] args) { try { int[] numbers = {1, 2, 3}; System.out.println(numbers); // Zde dojde k ArrayIndexOutOfBoundsException } catch (ArrayIndexOutOfBoundsException | ArithmeticException e) { System.out.println("Zachycena výjimka: " + e.getMessage()); } } } Vyhození výjimky Pokud chcete vyhodit výjimku, můžete použít klíčové slovo throw. To se obvykle používá v metodách, které mohou narazit na problém, který nelze vyřešit. public class ThrowExample { public static void main(String[] args) { try { checkAge(15); } catch (MyCustomException e) { System.out.println("Zachycena výjimka: " + e.getMessage()); } } public static void checkAge(int age) throws MyCustomException { if (age < 18) { throw new MyCustomException("Musíte být starší 18 let."); } } } Assert v Javě assert je klíčové slovo v Javě, které se používá k testování podmínek během běhu programu. Pokud podmínka není splněna, vyvolá se AssertionError. Používá se především pro ladění a testování. Pokud se program spustí bez parametru -ea , assert nebude fungovat a nebude vyvolána žádná výjimka. To znamená, že assert by neměl být používán pro kontrolu podmínek, které by měly být splněny v produkčním kódu. -> Není alternativou k výjimkám Příklad použití assert : public class AssertExample { public static void main(String[] args) { int x = 5; assert x > 0 : "x musí být kladné číslo"; // Pokud x není kladné, vyvolá se AssertionError System.out.println("x je kladné číslo: " + x); } }