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 izErrorrazreda, itd - Preverjene izjeme: preverijo se v času prevajanja. Na primer
IOException,InterruptedExceptionitd
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 throwin throws.
Java vrže ključno besedo
Ključno throwsbesedo 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 throwsz 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, FileInputStreamvrne a, FileNotFoundExceptionki razširja IOExceptionrazred , če datoteka ne obstaja .
Če metoda ne obravnava izjem, je treba v členu določiti vrsto izjem, ki se lahko pojavijo v njej, throwstako da jih metode, ki se nahajajo v nizu klicev, lahko obravnavajo ali določijo s pomočjo throwsključne besede same.
findFile()Metoda določa, da IOExceptionse 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 throwsključ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, IOExceptionin InvalidClassExceptionv throwsklavzuli.
Upoštevajte, da nismo obdelali NullPointerException. To je zato, ker gre za nepreverjeno izjemo. Ni ga treba določiti v throwsklavzuli in obravnavati.
vrže ključno besedo Vs. poskusite … ulovite … končno
Izjeme lahko povzročijo več metod. Pisanje try… catchza 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 throwbeseda se uporablja za izrecno vrnitev ene same izjeme.
Ko se vrne izjema, se tok izvajanja programa prenese iz trybloka v catchblok. Ključno throwbesedo uporabljamo znotraj metode.
Njegova sintaksa je:
throw throwableObject;
Predmet, ki ga je mogoče vrniti, je primerek razreda Throwableali podrazreda Throwablerazreda.
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 IOExceptions sporočilom smo opravili svoje gradbenik.
Ker gre za preverjeno izjemo, jo moramo določiti v throwsstavku.
Metode, ki kličejo to findFile()metodo, morajo to izjemo obvladati ali pa jo throwssami določiti s ključno besedo.
To izjemo smo obravnavali v main()metodi. Tok izvrševanja programa se prenaša iz trybloka v catchblok, ko se vrne izjema. Torej, preostala koda v trybloku se preskoči in stavki v catchbloku se izvršijo.








