Selles õpetuses õpime näidete abil Java proovimislauset.
try… catchPloki Java kasutatakse käepidet erandeid ja takistab ebanormaalne programmi lõppemist.
Siin on try… catchJava ploki süntaks .
try( // code ) catch(exception) ( // code )
tryPlokk sisaldab koodi, mis võib tekitada erand.
catchPlokk sisaldab koodi, mis täidetakse, kui esineb erand sees tryblokeerida.
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 tryblokeerinud.
Kui programm selle koodiga kokku puutub, ArithmeticExceptiontekib. Ja catchplokk püüab erandi kinni ja käivitab plokis oleva koodi catch.
catchPlokk, täidetakse ainult siis, kui on olemas erand sees tryblokeerida.
Märkus : Java-s võime kasutada tryplokki ilma catchplokita. Siiski ei saa me catchplokki kasutada ilma tryplokita.
Java proovige … lõpuks blokeerige
Samuti võime kasutada tryplokki 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 tryplokki kasutanud koos finallyplokiga. Näeme, et tryplokis olev kood põhjustab erandi.
finallyPlokisisene kood täidetakse siiski erandist sõltumata.
Java proovige … püüdke … lõpuks blokeerige
Java-s saame kasutada ka viimast plokki pärast try… catchplokki. 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 5viimane 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 finallyplokk on alati täidetud, oleme lisanud koodi, et sulgeda viimase PrintWriterploki sisekülg.
Hea tava on kasutada viimast blokeerimist, et lisada oluline puhastuskood, näiteks faili või ühenduse sulgemine.
Märkus . Mõnel juhul finallyei käivitata plokki:
- Kasutamine
System.exit()meetod finallyPlokis esineb erand- Niidi surm
Mitu püüdmisplokki
Iga tryploki jaoks võib olla null või rohkem catchplokki. Mitu catchplokki võimaldab meil iga erandit erinevalt käsitleda.
Iga catchploki 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 arrsuurusega 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 IndexOutOfBoundExceptiontoimub.
Kui tryplokis ilmneb erand ,
- The exception is thrown to the first
catchblock. The firstcatchblock does not handle anIndexOutOfBoundsException, so it is passed to the nextcatchblock. - The second
catchblock 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.








