Java hodí a hodí klíčové slovo

V tomto kurzu se naučíme používat klíčové slovo throw and throws pro zpracování výjimek pomocí příkladů.

V Javě lze výjimky rozdělit do dvou typů:

  • Nekontrolované Výjimky: Oni nejsou kontrolovány při kompilaci-time, ale při spuštění time.For například: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsExceptionvýjimky v rámci Errortřídy, atd
  • Zkontrolované výjimky: Jsou zkontrolovány v době kompilace. Například IOException, InterruptedExceptionatd

V části Výjimky Java se dozvíte podrobněji o kontrolovaných a nekontrolovaných výjimkách.

Obvykle nepotřebujeme zpracovávat nezaškrtnuté výjimky. Je to proto, že k nekontrolovaným výjimkám dochází kvůli programovacím chybám. Osvědčeným postupem je místo manipulace je opravit.

Tento kurz se nyní zaměří na to, jak zacházet s kontrolovanými výjimkami pomocí throwa throws.

Java hodí klíčové slovo

throwsKlíčové slovo v deklaraci metody používáme k deklaraci typu výjimek, které se v něm mohou vyskytnout.

Jeho syntaxe je:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Jak vidíte z výše uvedené syntaxe, můžeme použít throwsk deklaraci více výjimek.

Příklad 1: Java vyvolá klíčové slovo

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Výstup

 java.io.FileNotFoundException: test.txt (žádný takový soubor nebo adresář) 

Když spustíme tento program, pokud soubor test.txtneexistuje, FileInputStreamhodí a FileNotFoundExceptionkterý rozšiřuje IOExceptiontřídu.

Pokud metoda nezpracovává výjimky, typ výjimek, které se v ní mohou vyskytnout, musí být zadán v throwsklauzuli, aby je metody, které jsou dále v zásobníku volání, mohly zpracovat nebo je určit pomocí throwssamotného klíčového slova.

findFile()Metoda určuje, že IOExceptionmůže být vyvolána. main()Metoda volá tuto metodu a zpracovává výjimku, pokud je vyvolána.

Vyvolání několika výjimek

Zde je ukázka, jak můžeme pomocí throwsklíčového slova vyvolat více výjimek .

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Zde je findFile()metoda určuje, že to může hodit NullPointerException, IOExceptiona InvalidClassExceptionve své throwsklauzule.

Všimněte si, že jsme nezpracovali NullPointerException. Je to proto, že se jedná o nezaškrtnutou výjimku. Není nutné jej v throwsklauzuli specifikovat a zpracovávat.

hodí klíčové slovo Vs. zkuste … chytit … konečně

Může existovat několik metod, které mohou způsobit výjimky. Psaní try… catchpro každou metodu bude zdlouhavé a kód se stane dlouhým a méně čitelným.

throws je také užitečné, když jste zkontrolovali výjimku (výjimku, která musí být zpracována), kterou nechcete zachytit ve své aktuální metodě.

Klíčové slovo Java hodu

throwKlíčové slovo se používá explicitně vyvoláním jediné výjimky.

Když je vyvolána výjimka, tok provádění programu se přenáší z trybloku do catchbloku. throwKlíčové slovo používáme v rámci metody.

Jeho syntaxe je:

 throw throwableObject;

Vrhací objekt je instancí třídy Throwablenebo podtřídy Throwabletřídy.

Příklad 2: Klíčové slovo Java throw

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Výstup

 Výjimka ve vlákně "main" java.lang.ArithmeticException: Pokus o dělení 0 na Main.divideByZero (Main.java:3) na Main.main (Main.java:7) stav ukončení 1 

V tomto příkladu jsme výslovně házeli ArithmeticException.

Poznámka: ArithmeticException je nezaškrtnutá výjimka. Obvykle není nutné zpracovávat nezaškrtnuté výjimky.

Příklad 3: Vyhodení zaškrtnuté výjimky

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Výstup

 Soubor nenalezen 

findFile()Metoda vyvolá IOExceptionse zprávou jsme minuli jeho konstruktoru.

Všimněte si, že protože se jedná o kontrolovanou výjimku, musíme ji specifikovat v throwsklauzuli.

Metody, které volají tuto findFile()metodu, musí tuto výjimku zpracovat nebo ji zadat pomocí throwssamotného klíčového slova.

Tuto main()metodu jsme zpracovali v metodě. Tok provádění přenosu programu z trybloku do catchbloku při vyvolání výjimky. Takže zbytek kódu v trybloku je přeskočen a příkazy v catchbloku jsou provedeny.

Zajímavé články...