Java try ... catch (ar piemēriem)

Š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 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

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.

Interesanti raksti...