Õpetuses õpime näidete abil tundma Java erandite käsitlemise erinevaid lähenemisviise.
Viimases õpetuses õppisime Java erandeid. Me teame, et erandid lõpetavad programmi täitmise ebanormaalselt.
Seetõttu on oluline käsitleda erandeid. Siin on loetelu Java-s kasutatavate erandite käsitlemise erinevatest lähenemisviisidest.
- proovige … püüdke plokk
- lõpuks blokeerida
- viska ja viskab märksõna
1. Java proovige … püüdeplokk
Proovi püüdmise plokki kasutatakse Java erandite käsitlemiseks. Siin on try… catch
ploki süntaks :
try ( // code ) catch(Exception e) ( // code )
Siia oleme paigutanud try
ploki sisse koodi, mis võib tekitada erandi . Igale try
plokile järgneb catch
plokk.
Erandi ilmnemisel jääb see catch
bloki haardesse. catch
Plokk ei saa kasutada ilma try
blokeerida.
Näide: erandite käsitlemine try … catch abil
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Väljund
Aritmeetiline erand => / nulliga
Näites püüame arvu jagada 0
. Siin loob see kood erandi.
Selleks et tulla toime erand, oleme pannud koodi 5 / 0
sees try
blokeerida. Kui tekib erand, jäetakse ülejäänud kood try
ploki sees vahele.
catch
Plokk püüab välja arvatud ja avaldused sees saagi plokk täidetakse.
Kui ükski try
ploki lause ei tekita erandit, catch
jäetakse see plokk vahele.
2. Java lõpuks blokeerib
Java-s finally
käivitatakse plokk alati, olenemata sellest, kas on erand või mitte.
finally
Plokk on valikuline. Ja iga try
ploki jaoks võib olla ainult üks finally
plokk.
Bloki finally
põhisüntaks on:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Erandi ilmnemisel finally
käivitatakse try… catch
plokk pärast plokki. Vastasel juhul käivitatakse see pärast prooviblokki. Iga try
ploki jaoks võib olla ainult üks finally
plokk.
Näide: Java erandkäsitlus, kasutades viimast plokki
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Väljund
ArithmeticException => / nulliga See on viimane plokk
Ülaltoodud näites jagame arvu ploki sees 0-gatry
. Siin genereerib see kood ArithmeticException
.
Erand on catch
blokeeritud. Ja siis finally
blokeeritakse.
Märkus : Bloki kasutamine on hea tava finally
. Sellepärast, et see võib sisaldada olulisi puhastuskoode, näiteks
- kood, mille tagasitulek võib kogemata vahele jätta, jätkata või puruneda
- faili või ühenduse sulgemine
3. Java viska ja viskab märksõna
Java throw
märksõna kasutatakse selgesõnaliselt ühe erandi tegemiseks.
Kui me oleme throw
erand, liigub programmi voog try
plokist catch
plokki.
Näide: erandkäsitlus Java viskega
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Väljund
Erand lõimes "main" java.lang.ArithmeticException: proovitakse jagada 0-ga aadressil Main.divideByZero (Main.java:5) aadressil Main.main (Main.java:9)
Eespool toodud näites, oleme selgelt viskamine ArithmeticException
kasutades throw
märksõna.
Samamoodi kasutatakse throws
märksõna meetodi raames esinevate erandite tüübi deklareerimiseks. Seda kasutatakse meetodi deklaratsioonis.
Näide: Java viskab märksõna
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate 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äljund
java.io.FileNotFoundException: test.txt (süsteem ei leia määratud faili)
Kui faili test.txt pole, käivitame selle programmi käivitades FileInputStream
a, FileNotFoundException
mis laiendab IOException
klassi.
findFile()
Meetod täpsustatakse, et IOException
võib visata. main()
Meetod nõuab see meetod ja käepidemed, välja arvatud juhul, kui see on visatud.
Kui meetod ei käsitle erandeid, tuleb throws
klauslis täpsustada selle sees esineda võivate erandite tüüp .
Lisateabe saamiseks külastage Java viskeid ja viskeid.