Selles õpetuses õpime näidete abil Java proovimislauset.
try… catch
Ploki Java kasutatakse käepidet erandeid ja takistab ebanormaalne programmi lõppemist.
Siin on try… catch
Java ploki süntaks .
try( // code ) catch(exception) ( // code )
try
Plokk sisaldab koodi, mis võib tekitada erand.
catch
Plokk sisaldab koodi, mis täidetakse, kui esineb erand sees try
blokeerida.
Näide: Java try … catch block
class Main ( public static void main(String() args) ( try ( 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
Ülaltoodud näites märkake rida,
int divideByZero = 5 / 0;
Siin proovime arvu jagada nulliga . Sel juhul tekib erand. Seega oleme selle koodi try
blokeerinud.
Kui programm selle koodiga kokku puutub, ArithmeticException
tekib. Ja catch
plokk püüab erandi kinni ja käivitab plokis oleva koodi catch
.
catch
Plokk, täidetakse ainult siis, kui on olemas erand sees try
blokeerida.
Märkus : Java-s võime kasutada try
plokki ilma catch
plokita. Siiski ei saa me catch
plokki kasutada ilma try
plokita.
Java proovige … lõpuks blokeerige
Samuti võime kasutada try
plokki koos viimase plokiga.
Sel juhul käivitatakse viimane plokk alati olenemata sellest, kas prooviploki sees on erand või mitte.
Näide: Java proovige … lõpuks blokeerige
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Väljund
Lõpuks käivitatakse plokk alati. Erand lõimes "main" java.lang.ArithmeticException: / nulliga juures Main.main (Main.java:4)
Ülaltoodud näites oleme try
plokki kasutanud koos finally
plokiga. Näeme, et try
plokis olev kood põhjustab erandi.
finally
Plokisisene kood täidetakse siiski erandist sõltumata.
Java proovige … püüdke … lõpuks blokeerige
Java-s saame kasutada ka viimast plokki pärast try… catch
plokki. Näiteks,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Väljund
Proovilause sisestamine Erand => Indeks 5 piirdest väljapoole piire 5 PrintWriteri sulgemine
Ülalolevas näites oleme loonud massiivi nimega loendi ja faili nimega output.txt. Siin proovime massiivi andmeid lugeda ja faili salvestada.
Pange tähele koodi,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Siin on massiivi suurus ja massiivi 5
viimane element asub list(4)
. Siiski proovime elementidele juurde pääseda aadressil a(5)
ja a(6)
.
Seega genereerib kood erandi, mille püügiplokk püüab.
Kuna finally
plokk on alati täidetud, oleme lisanud koodi, et sulgeda viimase PrintWriter
ploki sisekülg.
Hea tava on kasutada viimast blokeerimist, et lisada oluline puhastuskood, näiteks faili või ühenduse sulgemine.
Märkus . Mõnel juhul finally
ei käivitata plokki:
- Kasutamine
System.exit()
meetod finally
Plokis esineb erand- Niidi surm
Mitu püüdmisplokki
Iga try
ploki jaoks võib olla null või rohkem catch
plokki. Mitu catch
plokki võimaldab meil iga erandit erinevalt käsitleda.
Iga catch
ploki argumendi tüüp näitab erandi tüüpi, mida see saab käsitleda. Näiteks,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Väljund
IndexOutOfBoundsException => Indeks 10 väljapoole piire 10
Selles näites oleme loonud täisarvu massiivi arr
suurusega 10 .
Kuna massiivi indeks algab 0-st , asub massiivi viimane element arr(9)
. Pange tähele avaldust,
arr(10) = 11;
Siin proovime indeksile 10 väärtuse omistada . Seega IndexOutOfBoundException
toimub.
Kui try
plokis ilmneb erand ,
- The exception is thrown to the first
catch
block. The firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. Hence, it is executed.
Catching Multiple Exceptions
From Java SE 7 and later, we can now catch more than one type of exception with one catch
block.
This reduces code duplication and increases code simplicity and efficiency.
Each exception type that can be handled by the catch
block is separated using a vertical bar |
.
Its syntax is:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
To learn more, visit Java catching multiple exceptions.
Java try-with-resources statement
Avaldus proovige ressurssidega on proovilause, millel on üks või mitu ressursideklaratsiooni.
Selle süntaks on:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Ressurss on programm, mis tuleb programmi lõpus sulgeda. See tuleb proovideklaratsioonis deklareerida ja initsialiseerida.
Võtame näite.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Proovida-with-ressursside avaldust nimetatakse ka automaatse ressursside juhtimine . See lause sulgeb kõik avalduse lõpus olevad ressursid automaatselt.
Lisateabe saamiseks külastage java try-with-resources avaldust.