V tej vadnici se bomo s pomočjo primerov naučili uporabljati ključno besedo throw and throws za obravnavo izjem.
V Javi lahko izjeme razvrstimo v dve vrsti:
- Neizbrani Izjeme: Niso preverja ob prevajanju času, vendar na doživljenjsko time.For primer:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, Izjeme izError
razreda, itd - Preverjene izjeme: preverijo se v času prevajanja. Na primer
IOException
,InterruptedException
itd
Za podrobnosti o preverjenih in nepreverjenih izjemah glejte Izjeme Java.
Običajno nam ni treba obravnavati nepreverjenih izjem. Razlog za to je, da se zaradi programskih napak pojavijo nepreverjene izjeme. In dobra praksa je, da jih popravite, namesto da bi z njimi ravnali.
Ta vadnica se bo zdaj osredotočila na to, kako ravnati s preverjenimi izjemami z uporabo throw
in throws
.
Java vrže ključno besedo
Ključno throws
besedo v deklaraciji metode uporabljamo za razglasitev vrste izjem, ki bi se lahko pojavile v njej.
Njegova sintaksa je:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Kot lahko vidite iz zgornje sintakse, lahko throws
z njo prijavimo več izjem.
Primer 1: Java vrže ključno besedo
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); ) ) )
Izhod
java.io.FileNotFoundException: test.txt (Ni takšne datoteke ali imenika)
Ko zaženemo ta program test.txt
, FileInputStream
vrne a, FileNotFoundException
ki razširja IOException
razred , če datoteka ne obstaja .
Če metoda ne obravnava izjem, je treba v členu določiti vrsto izjem, ki se lahko pojavijo v njej, throws
tako da jih metode, ki se nahajajo v nizu klicev, lahko obravnavajo ali določijo s pomočjo throws
ključne besede same.
findFile()
Metoda določa, da IOException
se lahko vrže. main()
Metoda zahteva ta metoda in ročaji izjema, če se vrže.
Metanje več izjem
Tukaj je opisano, kako lahko z uporabo throws
ključne besede vržemo več izjem .
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()); ) ) )
Tukaj je findFile()
metoda določa, da lahko vrgel NullPointerException
, IOException
in InvalidClassException
v throws
klavzuli.
Upoštevajte, da nismo obdelali NullPointerException
. To je zato, ker gre za nepreverjeno izjemo. Ni ga treba določiti v throws
klavzuli in obravnavati.
vrže ključno besedo Vs. poskusite … ulovite … končno
Izjeme lahko povzročijo več metod. Pisanje try… catch
za vsako metodo bo dolgočasno in koda postane dolga in manj berljiva.
throws
je uporaben tudi, če ste označili izjemo (izjemo, ki jo je treba obdelati), ki je ne želite ujeti v trenutni metodi.
Ključna beseda Java throw
Ključna throw
beseda se uporablja za izrecno vrnitev ene same izjeme.
Ko se vrne izjema, se tok izvajanja programa prenese iz try
bloka v catch
blok. Ključno throw
besedo uporabljamo znotraj metode.
Njegova sintaksa je:
throw throwableObject;
Predmet, ki ga je mogoče vrniti, je primerek razreda Throwable
ali podrazreda Throwable
razreda.
Primer 2: Ključna beseda Java throw
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Izhod
Izjema v niti "main" java.lang.ArithmeticException: Poskus delitve z 0 na Main.divideByZero (Main.java:3) na Main.main (Main.java:7) status izhoda 1
V tem primeru izrecno vržemo ArithmeticException.
Opomba: ArithmeticException
je nepreverjena izjema. Običajno ni treba obdelovati nepreverjenih izjem.
3. primer: metanje preverjene izjeme
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()); ) ) )
Izhod
Datoteka ni najdena
findFile()
Metoda vrže IOException
s sporočilom smo opravili svoje gradbenik.
Ker gre za preverjeno izjemo, jo moramo določiti v throws
stavku.
Metode, ki kličejo to findFile()
metodo, morajo to izjemo obvladati ali pa jo throws
sami določiti s ključno besedo.
To izjemo smo obravnavali v main
()
metodi. Tok izvrševanja programa se prenaša iz try
bloka v catch
blok, ko se vrne izjema. Torej, preostala koda v try
bloku se preskoči in stavki v catch
bloku se izvršijo.