Šioje pamokoje išmoksime naudoti metimo ir metimo raktinį žodį, kad būtų galima tvarkyti išimtis, naudojant pavyzdžius.
„Java“ išimtis galima suskirstyti į du tipus:
- Nepažymėjus Išimtys: Jie nėra patikrintas kompiliavimo metu, bet ne paleisti-time.For Pavyzdžiui:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, išimtys pagalError
klasę, ir tt - Pažymėtos išimtys: jos tikrinamos kompiliavimo metu. Pavyzdžiui
IOException
,,InterruptedException
ir kt.
Norėdami sužinoti išsamiau apie patikrintas ir nepažymėtas išimtis, skaitykite „Java“ išimtis.
Paprastai mums nereikia tvarkyti nepatikrintų išimčių. Taip yra todėl, kad nepatikrintos išimtys atsiranda dėl programavimo klaidų. Geriausia juos taisyti, o ne tvarkyti.
Šioje pamokoje dabar daugiausia dėmesio bus skiriama patikrintoms išimtims, naudojant throw
ir throws
.
Java meta raktinį žodį
Mes naudojame throws
raktažodį metodas deklaracijoje deklaruoti išimčių, kad gali atsirasti joje tipą.
Jo sintaksė yra:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Kaip matote iš pirmiau nurodytos sintaksės, galime naudoti throws
deklaruodami kelias išimtis.
1 pavyzdys: „Java“ meta raktinį žodį
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); ) ) )
Rezultatas
java.io.FileNotFoundException: test.txt (tokio failo ar katalogo nėra)
Kai paleidžiame šią programą, jei failo test.txt
nėra, FileInputStream
išmeta a, FileNotFoundException
kuris pratęsia IOException
klasę.
Jei metodas netvarko išimčių, išlygų, kurios gali atsirasti joje, tipas turi būti nurodytas throws
straipsnyje, kad metodai, esantys aukščiau skambučių kamino, galėtų jas tvarkyti arba nurodyti patys naudodami throws
raktinį žodį.
findFile()
Metodas nurodo, kad IOException
gali būti išmestas. main()
Metodas reikalauja šį metodą ir rankenos išimtį, jei jis yra išmestas.
Išmesti kelias išimtis
Štai kaip galime išskirti kelias išimtis naudodami throws
raktinį žodį.
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()); ) ) )
Čia findFile()
metodas nurodo, kad jis gali mesti NullPointerException
, IOException
ir InvalidClassException
jos throws
sąlygos.
Atkreipkite dėmesį, kad mes netvarkėme NullPointerException
. Taip yra todėl, kad tai nėra patikrinta išimtis. Nebūtina jo nurodyti throws
sąlygoje ir tvarkyti.
meta raktinį žodį Vs. pabandyk … pagauti … pagaliau
Gali būti keli būdai, galintys sukelti išimtis. try… catch
Kiekvieno metodo rašymas bus nuobodus, kodas taps ilgas ir mažiau įskaitomas.
throws
taip pat naudinga, kai pažymėjote išimtį (išimtį, kurią reikia tvarkyti), kurios nenorite sugauti taikydami dabartinį metodą.
„Java“ metimo raktinis žodis
throw
Raktažodis naudojamas aiškiai mesti vieną išimtį.
Kai išmetama išimtis, programos vykdymo srautas pereina iš try
bloko į catch
bloką. Raktinį throw
žodį naudojame metode.
Jo sintaksė yra:
throw throwableObject;
Metamas daiktas yra klasės Throwable
arba klasės poklasio egzempliorius Throwable
.
2 pavyzdys: „Java“ metimo raktinis žodis
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Rezultatas
Išimtis temoje „main“ java.lang.ArithmeticException: bandoma padalyti iš 0 iš Main.divideByZero (Main.java:3) at Main.main (Main.java:7) išėjimo būsenos 1
Šiame pavyzdyje mes aiškiai metame ArithmeticException.
Pastaba: ArithmeticException
yra nepatikrinta išimtis. Paprastai nebūtina tvarkyti nepatikrintų išimčių.
3 pavyzdys: metimo patikrinta išimtis
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()); ) ) )
Rezultatas
Failas nerastas
findFile()
Metodas metimų IOException
su pranešimu mes išlaikė savo konstruktorius.
Atkreipkite dėmesį, kad kadangi tai yra pažymėta išimtis, turime ją nurodyti throws
sąlygoje.
Metodai, kurie vadina šį findFile()
metodą, turi tvarkyti šią išimtį arba nurodyti ją throws
patys naudodami raktinį žodį.
Mes išnagrinėjome šią išimtį taikydami main
()
metodą. Programos vykdymo srautas perkeliamas iš try
bloko į catch
bloką, kai išmetama išimtis. Taigi, likęs try
bloko kodas praleidžiamas ir catch
vykdomi sakiniai bloke.