Java hodí a hodí kľúčové slovo

V tomto tutoriále sa pomocou príkladov naučíme používať kľúčové slovo throw and throws na spracovanie výnimiek.

V prostredí Java možno výnimky rozdeliť do dvoch typov:

  • Nekontrolované Výnimky: Oni nie sú kontrolované pri kompilácii-time, ale pri spustení time.For napríklad: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsExceptionvýnimky v rámci Errortriedy, atď
  • Skontrolované výnimky: Kontrolujú sa pri kompilácii. Napríklad IOException, InterruptedExceptionatď

V časti Výnimky jazyka Java sa dozviete podrobnejšie o kontrolovaných a nekontrolovaných výnimkách.

Zvyčajne nepotrebujeme riešiť nezaškrtnuté výnimky. Je to preto, lebo sa vyskytujú nekontrolované výnimky v dôsledku programovacích chýb. Je dobrým zvykom ich namiesto manipulácie opraviť.

Tento výukový program sa teraz zameria na to, ako zvládnuť skontrolované výnimky pomocou throwa throws.

Java hodí kľúčové slovo

throwsKľúčové slovo v deklarácii metódy používame na deklarovanie typu výnimiek, ktoré sa v ňom môžu vyskytnúť.

Jeho syntax je:

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

Ako vidíte z vyššie uvedenej syntaxe, môžeme použiť throwsna vyhlásenie viacerých výnimiek.

Príklad 1: Java hodí kľúč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ýkon

 java.io.FileNotFoundException: test.txt (Žiadny takýto súbor alebo adresár) 

Keď spustíme tento program, ak súbor test.txtneexistuje, FileInputStreamhodí znak, FileNotFoundExceptionktorý rozširuje IOExceptiontriedu.

Ak metóda nespracúva výnimky, musí byť v throwsklauzule zadaný typ výnimiek, ktoré sa v nej môžu vyskytnúť , aby ich metódy ďalej v zásobníku hovorov mohli spracovať alebo určiť pomocou throwssamotného kľúčového slova.

findFile()Metóda určuje, že IOExceptionmôže byť vyvolaná. main()Metóda volá túto metódu a spracováva výnimku, ak je vyvolaná.

Hádzanie viacerých výnimiek

Tu je príklad, ako môžeme pomocou throwskľúčového slova vyvolať viac výnimiek .

 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()); ) ) ) 

Tu je findFile()metóda určuje, že to môže hodiť NullPointerException, IOExceptiona InvalidClassExceptionvo svojej throwsklauzuly.

Upozorňujeme, že sme nespracovali NullPointerException. Je to preto, lebo ide o nekontrolovanú výnimku. Nie je potrebné to throwsdoložiť a zaoberať sa tým.

hodí kľúčové slovo vs. skúste … chytiť … konečne

Môže existovať niekoľko metód, ktoré môžu spôsobiť výnimky. Písanie try… catchpre každú metódu bude zdĺhavé a kód sa stane dlhým a menej čitateľným.

throws je tiež užitočné, ak ste skontrolovali výnimku (výnimku, ktorú je potrebné spracovať), ktorú nechcete v aktuálnej metóde zachytiť.

Kľúčové slovo Java throw

throwKľúčové slovo sa používa explicitne vyvolaním jedinej výnimky.

Keď sa vyvolá výnimka, tok vykonávania programu sa prevedie z trybloku do catchbloku. throwKľúčové slovo používame v rámci metódy.

Jeho syntax je:

 throw throwableObject;

Vrhací objekt je inštanciou triedy Throwablealebo podtriedy Throwabletriedy.

Príklad 2: Kľúč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ýkon

 Výnimka vo vlákne „main“ java.lang.ArithmeticException: Pokus o rozdelenie 0 na Main.divideByZero (Main.java:3) na Main.main (Main.java:7) výstupný stav 1 

V tomto príklade výslovne hádžeme znak ArithmeticException.

Poznámka: ArithmeticException je nezačiarknutá výnimka. Spravidla nie je potrebné vybavovať nekontrolované výnimky.

Príklad 3: Vyhodenie skontrolovanej výnimky

 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ýkon

 Súbor nenájdený 

findFile()Metóda vyvolá IOExceptionso správou sme minuli jeho konstruktoru.

Upozorňujeme, že keďže ide o kontrolovanú výnimku, musíme ju uviesť v throwsklauzule.

Metódy, ktoré túto findFile()metódu volajú, musia túto výnimku spracovať alebo ju určiť pomocou throwssamotného kľúčového slova.

Túto main()metódu sme vybavili touto metódou. Tok prenosu vykonávania programu z trybloku do catchbloku, keď je vyvolaná výnimka. Takže zvyšok kódu v trybloku sa preskočí a catchvykonajú sa príkazy v bloku.

Zaujímavé články...