U ovom uputstvu naučit ćemo koristiti ključnu riječ throw and throws za rukovanje iznimkama uz pomoć primjera.
U Javi se iznimke mogu kategorizirati u dvije vrste:
- Nepotvrđenim iznimke: Oni nisu provjereni u prevođenja vremenu, ali u vožnji-time.For primjer:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, iznimke podError
klase, itd - Označene iznimke: Provjeravaju se u vrijeme prevođenja. Na primjer,
IOException
,InterruptedException
, itd
Pogledajte Java iznimke kako biste detaljno saznali o provjerenim i neprovjerenim iznimkama.
Obično ne trebamo postupati s neprovjerenim iznimkama. To je zato što se neprovjerene iznimke javljaju zbog programskih pogrešaka. I dobra je praksa ispraviti ih umjesto rukovati njima.
Ovaj će se vodič sada usredotočiti na postupanje s provjerenim iznimkama pomoću throw
i throws
.
Java baca ključnu riječ
Koristimo throws
ključnu riječ u deklaraciji metode da bismo deklarirali vrstu iznimki koje bi se mogle pojaviti u njoj.
Njegova sintaksa je:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Kao što možete vidjeti iz gornje sintakse, možemo koristiti throws
za deklariranje višestrukih iznimaka.
Primjer 1: Java baca ključnu riječ
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); ) ) )
Izlaz
java.io.FileNotFoundException: test.txt (Nema takve datoteke ili direktorija)
Kada pokrenemo ovaj program, ako datoteka test.txt
ne postoji, FileInputStream
baca se a FileNotFoundException
koja proširuje IOException
klasu.
Ako se metoda ne obrađuje s iznimkama, vrsta iznimki koje se mogu pojaviti unutar nje mora biti navedena u throws
klauzuli, tako da metode dalje u snopu poziva mogu s njima postupati ili ih odrediti pomoću throws
same ključne riječi.
findFile()
Metoda navodi da IOException
može biti izbačen. main()
Metoda naziva ovu metodu i obrađuje iznimku ako je bačena.
Bacanje višestrukih iznimaka
Evo kako možemo izbaciti višestruke iznimke pomoću throws
ključne riječi.
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()); ) ) )
Ovdje se findFile()
način određuje da se može baciti NullPointerException
, IOException
te InvalidClassException
u svom throws
članku.
Imajte na umu da nismo obrađivali NullPointerException
. To je zato što je to neprovjerena iznimka. Nije potrebno to navesti u throws
klauzuli i rukovati njime.
baca ključnu riječ vs. pokušaj … uhvati … konačno
Postoji nekoliko metoda koje mogu uzrokovati iznimke. Pisanje try… catch
za svaku metodu bit će zamorno, a kôd postaje dugačak i manje čitljiv.
throws
je korisno i kada ste označili iznimku (iznimku kojom se mora rukovati) koju ne želite uhvatiti u svojoj trenutnoj metodi.
Ključna riječ Java bacanje
throw
Ključna riječ se koristi za izravno baciti jednu iznimku.
Kada se izuzme izuzetak, tok izvođenja programa prenosi se iz try
bloka u catch
blok. Koristimo throw
ključnu riječ unutar metode.
Njegova sintaksa je:
throw throwableObject;
Predmet koji se može baciti je instanca klase Throwable
ili podklase Throwable
klase.
Primjer 2: Ključna riječ Java bacanje
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Izlaz
Iznimka u niti "main" java.lang.ArithmeticException: Pokušaj dijeljenja s 0 na Main.divideByZero (Main.java:3) na Main.main (Main.java:7) statusu izlaza 1
U ovom primjeru izričito bacamo ArithmeticException.
Napomena: ArithmeticException
je neprovjerena iznimka. Obično nije potrebno postupati s neprovjerenim iznimkama.
Primjer 3: Bacanje provjerene iznimke
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()); ) ) )
Izlaz
Datoteka nije pronađena
findFile()
Metoda baca IOException
s porukom smo prošli na svom graditelju.
Imajte na umu da, budući da je riječ o provjerenoj iznimci, moramo je navesti u throws
klauzuli.
Metode koje pozivaju ovu findFile()
metodu moraju ili obraditi ovu iznimku ili je odrediti pomoću throws
same ključne riječi.
Ovu smo iznimku obradili u main
()
metodi. Tok izvođenja programa prenosi se iz try
bloka u catch
blok kada se izuzme izuzetak. Dakle, ostatak koda u try
bloku se preskače i catch
izvršavaju se izrazi u bloku.