Java proovige ... püüdma (koos näidetega)

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 catch block. The first catch block does not handle an IndexOutOfBoundsException, so it is passed to the next catch block.
  • The second catch block in the above example is the appropriate exception handler because it handles an IndexOutOfBoundsException. 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.

Huvitavad Artiklid...