Šajā apmācībā mēs ar piemēriem uzzināsim par izmēģinājuma nozvejas paziņojumu Java.
try… catchJava bloks tiek izmantots, lai apstrādātu izņēmumiem un novērš patoloģiskas izbeigšanu programmas.
Šeit ir try… catchJava bloka sintakse .
try( // code ) catch(exception) ( // code )
tryBloks ietver kodu, kas var radīt izņēmumu.
catchBloks ietver kodu, kas tiek izpildīts, kad notiek izņēmumu iekšpusē trybloku.
Piemērs: 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()); ) ) )
Rezultāts
Aritmētiskais izņēmums => / par nulli
Iepriekš minētajā piemērā ievērojiet līniju,
int divideByZero = 5 / 0;
Šeit mēs cenšamies sadalīt skaitli ar nulli . Šajā gadījumā rodas izņēmums. Tādējādi mēs esam iekļāvuši šo kodu tryblokā.
Kad programma sastop šo kodu, ArithmeticExceptionnotiek. Izņēmums tiek uztverts catchblokā un izpilda kodu catchbloka iekšpusē .
catchBloks tiek izpildīts tikai tad, ja pastāv izņēmums iekšpusē trybloku.
Piezīme : Java valodā mēs varam izmantot trybloku bez catchbloka. Tomēr mēs nevaram izmantot catchbloku bez trybloka.
Java mēģiniet … beidzot bloķējiet
Mēs varam arī izmantot trybloku kopā ar galīgo bloku.
Šajā gadījumā pēdējais bloks vienmēr tiek izpildīts neatkarīgi no tā, vai mēģinājuma blokā ir vai nav izņēmums.
Piemērs: Java try… beidzot bloķēt
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Rezultāts
Visbeidzot, vienmēr tiek izpildīts bloks. Izņēmums pavedienā "main" java.lang.ArithmeticException: / ar nulli pie Main.main (Main.java:4)
Iepriekš minētajā piemērā mēs izmantojām trybloku kopā ar finallybloku. Mēs varam redzēt, ka kods trybloka iekšienē rada izņēmumu.
Tomēr kods finallyblokā tiek izpildīts neatkarīgi no izņēmuma.
Java mēģiniet … noķert … beidzot bloķēt
Java valodā mēs varam izmantot arī pēdējo bloku pēc try… catchbloka. Piemēram,
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(); ) )
Rezultāts
Ievadot mēģinājuma paziņojumu Izņēmums => Indekss 5 ārpus robežām 5. garumam. Noslēdzot PrintWriter
Iepriekš minētajā piemērā mēs esam izveidojuši masīvu ar nosaukumu sarakstu un failu ar nosaukumu output.txt. Mēs mēģinām nolasīt datus no masīva un saglabāt failā.
Ievērojiet kodu,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Šeit masīva lielums ir 5un masīva pēdējais elements atrodas list(4). Tomēr mēs cenšamies piekļūt elementiem vietnē a(5) un a(6).
Tādējādi kods ģenerē izņēmumu, kuru uztver nozvejas bloks.
Tā kā finallybloks vienmēr tiek izpildīts, mēs esam iekļāvuši kodu, lai noslēgtu PrintWriterbloka iekšpusi.
Ir laba prakse izmantot bloķēšanu, lai iekļautu svarīgu tīrīšanas kodu, piemēram, faila vai savienojuma aizvēršanu.
Piezīme : Ir daži gadījumi, kad finallybloks netiek izpildīts:
- Izmantošana
System.exit()metodē finallyBlokā notiek izņēmums- Vītnes nāve
Vairāki ķeršanas bloki
Katram tryblokam var būt nulle vai vairāk catchbloku. Vairāki catchbloki ļauj mums rīkoties ar katru izņēmumu atšķirīgi.
Katra catchbloka argumenta tips norāda izņēmuma veidu, ko tas var apstrādāt. Piemēram,
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(); ) )
Rezultāts
IndexOutOfBoundsException => Indekss 10 ārpus robežas garumam 10
Šajā piemērā mēs esam izveidojuši vesela skaitļa masīvu arrar 10. izmēru .
Tā kā masīva indekss sākas no 0 , masīva pēdējais elements atrodas arr(9). Ievērojiet paziņojumu,
arr(10) = 11;
Šeit mēs cenšamies piešķirt vērtību indeksam 10 . Tādējādi IndexOutOfBoundExceptionnotiek.
Kad tryblokā rodas izņēmums ,
- 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
Izraksts “ mēģiniet ar resursiem” ir mēģinājuma paziņojums, kuram ir viena vai vairākas resursu deklarācijas.
Tās sintakse ir:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Resurss ir objekts, kas jāaizver programmas beigās. Tas jādeklarē un inicializēts mēģinājuma paziņojumā.
Ņemsim piemēru.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Try-ar-resursu paziņojums tiek saukta arī automātisko resursu apsaimniekošanu . Šis paziņojums automātiski aizver visus resursus paziņojuma beigās.
Lai uzzinātu vairāk, apmeklējiet java try-with-resources paziņojumu.








