existují dva typy výjimek: zaškrtnutá výjimka a nekontrolovaná výjimka. V této příručce o nich budeme diskutovat. Hlavní rozdíl mezi checked a unchecked výjimkou je, že kontrolované výjimky jsou kontrolovány při kompilaci-čas při nekontrolované výjimky jsou kontrolovány při běhu.
jaké jsou kontrolované výjimky?
kontrolované výjimky jsou kontrolovány v době kompilace., To znamená, že pokud metoda hází zaškrtnutou výjimku, měla by zvládnout výjimku pomocí bloku try-catch nebo by měla deklarovat výjimku pomocí klíčového slova throws, jinak program poskytne chybu kompilace.
Umožňuje pochopit s pomocí příkladu:
Kontrolované Výjimky Příklad:
V tomto příkladu jsme čtení souboru myfile.txt
a zobrazování jeho obsahu na obrazovce. V tomto programu existují tři místa, kde je zaškrtnutá výjimka, jak je uvedeno v komentářích níže., FileInputStream, který se používá pro zadání cesty a názvu souboru, hodí FileNotFoundException
. Metodu read (), která načte obsah souboru hody IOException
close() metoda, která zavře soubor vstupní proud také hodí IOException
.
výstup:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
proč tato chyba kompilace? Jak jsem již zmínil na začátku, že kontrolované výjimky jsou kontrolovány během doby kompilace. Vzhledem k tomu, že jsme výjimky neřešili/deklarovali, náš program dal chybu kompilace.
Jak chybu vyřešit?, Existují dva způsoby, jak se této chybě vyhnout. Uvidíme oba způsoby jeden po druhém.
Metoda 1: deklarovat výjimku pomocí hodí Klíčové slovo.
Jak víme, že všechny tři výskyty kontrolovaných výjimek jsou uvnitř metody main (), takže jeden způsob, jak se vyhnout chybě kompilace, je: deklarovat výjimku v metodě pomocí klíčového slova hází. Možná si myslíte, že náš kód hází FileNotFoundException a IOException oba, proč deklarujeme IOException sám. Důvodem je, že IOException je nadřazená třída FileNotFoundException, takže to ve výchozím nastavení pokrývá., Pokud chcete, můžete je prohlásit takto public static void main(String args) throws IOException, FileNotFoundException
.
výstup: na obrazovce se zobrazí obsah souboru
.
Metoda 2: zacházejte s nimi pomocí bloků try-catch.
přístup, který jsme použili výše, není vůbec dobrý. Není to nejlepší výjimka manipulace praxe. Měli byste dát smysluplnou zprávu pro každý typ výjimky, aby bylo pro někoho snadné pochopit chybu. Kód by měl být následující:
tento kód bude fungovat dobře a zobrazí obsah souboru.,
Zde je několik dalších kontrolovaných Výjimek,
SQLException
IOException
ClassNotFoundException
InvocationTargetException
Jaké jsou Nekontrolované výjimky?
nekontrolované výjimky nejsou kontrolovány v době kompilace. To znamená, že pokud váš program je házení nekontrolovaná výjimka a i když jsi to nezvládl/prohlašuji, že výjimkou, program nebude dát chybě kompilace. Většinou k této výjimce dochází kvůli špatným datům poskytovaným uživatelem během interakce mezi uživatelem a programem., Je na programátorovi, aby předem posoudil podmínky, které mohou takové výjimky způsobit a náležitě s nimi zacházet. Všechny nekontrolované výjimky jsou přímé dílčí třídy třídy třídy RuntimeException.
Umožňuje pochopit na příkladu:
Nekontrolovaná Výjimka Příklad
Pokud byste zkompilovat tento kód, to by kompilace úspěšně, ale když budete utíkat, to by se hodit ArithmeticException
. To jasně ukazuje, že nekontrolované výjimky nejsou kontrolovány v době kompilace, dochází k nim za běhu. Podívejme se na další příklad.,
tento kód by se také úspěšně zkompiloval, protožeArrayIndexOutOfBoundsException
je také nekontrolovanou výjimkou.
Poznámka: neznamená to, že kompilátor tyto výjimky nekontroluje, takže bychom s nimi neměli zacházet. Ve skutečnosti bychom s nimi měli zacházet opatrněji. Například ve výše uvedeném příkladu by měla být pro uživatele zpráva o výjimce, že se snaží zobrazit hodnotu, která v poli neexistuje, aby uživatel mohl problém opravit.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException