Šajā apmācībā mēs ar piemēriem uzzināsim par izmēģinājuma nozvejas paziņojumu Java.
try… catch
Java bloks tiek izmantots, lai apstrādātu izņēmumiem un novērš patoloģiskas izbeigšanu programmas.
Šeit ir try… catch
Java bloka sintakse .
try( // code ) catch(exception) ( // code )
try
Bloks ietver kodu, kas var radīt izņēmumu.
catch
Bloks ietver kodu, kas tiek izpildīts, kad notiek izņēmumu iekšpusē try
bloku.
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 try
blokā.
Kad programma sastop šo kodu, ArithmeticException
notiek. Izņēmums tiek uztverts catch
blokā un izpilda kodu catch
bloka iekšpusē .
catch
Bloks tiek izpildīts tikai tad, ja pastāv izņēmums iekšpusē try
bloku.
Piezīme : Java valodā mēs varam izmantot try
bloku bez catch
bloka. Tomēr mēs nevaram izmantot catch
bloku bez try
bloka.
Java mēģiniet … beidzot bloķējiet
Mēs varam arī izmantot try
bloku 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 try
bloku kopā ar finally
bloku. Mēs varam redzēt, ka kods try
bloka iekšienē rada izņēmumu.
Tomēr kods finally
blokā 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… catch
bloka. 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 5
un 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ā finally
bloks vienmēr tiek izpildīts, mēs esam iekļāvuši kodu, lai noslēgtu PrintWriter
bloka 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 finally
bloks netiek izpildīts:
- Izmantošana
System.exit()
metodē finally
Blokā notiek izņēmums- Vītnes nāve
Vairāki ķeršanas bloki
Katram try
blokam var būt nulle vai vairāk catch
bloku. Vairāki catch
bloki ļauj mums rīkoties ar katru izņēmumu atšķirīgi.
Katra catch
bloka 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 arr
ar 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 IndexOutOfBoundException
notiek.
Kad try
blokā rodas izņēmums ,
- 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
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.