„Java try“ ... pagauti (su pavyzdžiais)

Šioje pamokoje su pavyzdžių pagalba sužinosime apie „Java“ bandymo sugauti teiginį.

try… catchJava “ blokas naudojamas išimtims tvarkyti ir apsaugo nuo nenormalaus programos nutraukimo.

Čia yra „ try… catchJava“ bloko sintaksė .

 try( // code ) catch(exception) ( // code )

tryBlokas apima kodą, kuris gali generuoti išimtį.

catchBlokas apima kodą, kuris yra vykdomas, kai įvyksta viduje išimtis trybloką.

Pavyzdys: „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()); ) ) )

Rezultatas

 Aritmetinė išimtis => / nuliu

Ankstesniame pavyzdyje atkreipkite dėmesį į eilutę,

 int divideByZero = 5 / 0;

Čia bandome skaičių padalyti iš nulio . Šiuo atveju pasitaiko išimtis. Taigi, šį kodą uždarėme trybloko viduje .

Kai programa susiduria su šiuo kodu, ArithmeticExceptionįvyksta. Išimtis catchblokuoja bloką ir vykdo kodą catchbloko viduje .

catchBlokas tik įvykdytas, jei egzistuoja viduje išimtis trybloką.

Pastaba : „Java“ sistemoje galime naudoti trybloką be catchbloko. Tačiau mes negalime naudoti catchbloko be trybloko.

„Java“ pabandykite … pagaliau užblokuokite

Mes taip pat galime naudoti trybloką kartu su galutiniu bloku.

Šiuo atveju galutinis blokas visada vykdomas neatsižvelgiant į tai, ar bandymo bloke yra išimtis, ar ne.

Pavyzdys: „Java try“ … pagaliau užblokuokite

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Rezultatas

 Galiausiai blokas visada vykdomas Išimtis gijoje „main“ java.lang.ArithmeticException: / nuliu „Main.main“ („Main.java:4“)

Ankstesniame pavyzdyje mes naudojome trybloką kartu su finallybloku. Matome, kad trybloko viduje esantis kodas sukelia išimtį.

Tačiau finallybloke esantis kodas vykdomas nepriklausomai nuo išimties.

„Java“ pabandykite … pagauti … pagaliau užblokuokite

„Java“ taip pat galime naudoti paskutinį bloką po try… catchbloko. Pavyzdžiui,

 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(); ) )

Rezultatas

 Įvesti bandomąjį teiginį Išimtis => 5 rodyklė iš ribų 5 ilgiui Uždaryti „PrintWriter“

Ankstesniame pavyzdyje mes sukūrėme masyvą pavadinimu sąrašas ir failą pavadinimu output.txt. Čia mes bandome nuskaityti duomenis iš masyvo ir saugoti faile.

Atkreipkite dėmesį į kodą,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Čia masyvo dydis yra 5ir paskutinis masyvo elementas yra list(4). Tačiau mes bandome pasiekti elementus a(5) ir a(6).

Taigi, kodas sukuria išimtį, kurią užfiksuoja sugavimo blokas.

Kadangi finallyblokas visada vykdomas, mes įtraukėme kodą, kad uždarytume PrintWritergalutinio bloko vidų.

Gera praktika yra naudoti galutinį blokavimą, kad būtų įtrauktas svarbus valymo kodas, pvz., Failo uždarymas ar ryšys.

Pastaba : Yra keletas atvejų, kai finallyblokas nevykdomas:

  • Naudojimas System.exit()metodu
  • finallyBloke atsiranda išimtis
  • Siūlų mirtis

Keli sugavimo blokai

Kiekvienam tryblokui gali būti nulis ar daugiau catchblokų. Keli catchblokai leidžia skirtingai elgtis su kiekviena išimtimi.

Kiekvieno catchbloko argumento tipas nurodo išimties tipą, kurį jis gali tvarkyti. Pavyzdžiui,

 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(); ) )

Rezultatas

 IndexOutOfBoundsException => 10 indekso ribų 10 ribų

Šiame pavyzdyje mes sukūrėme sveiko skaičiaus masyvą, pavadintą 10arr dydžiu .

Kadangi masyvo indeksas prasideda nuo 0 , paskutinis masyvo elementas yra arr(9). Atkreipkite dėmesį į pareiškimą,

 arr(10) = 11;

Čia bandome priskirti reikšmę indeksui 10 . Vadinasi, IndexOutOfBoundExceptionįvyksta.

Kai trybloke įvyksta išimtis ,

  • 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

Pareiškimas „ išbandyti su ištekliais“ yra bandomasis sakinys, kuriame yra viena ar daugiau išteklių deklaracijų.

Jo sintaksė yra:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

Ištekliai yra objektas, kuris turi būti uždarytas programos pabaigoje. Tai turi būti deklaruota ir inicializuota bandomajame sakinyje.

Paimkime pavyzdį.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

Pareiškimas „ išbandyti su ištekliais“ taip pat vadinamas automatiniu išteklių valdymu . Šis teiginys automatiškai uždaro visus išteklius ataskaitos pabaigoje.

Norėdami sužinoti daugiau, apsilankykite „Java“ bandymo su ištekliais pareiškime.

Įdomios straipsniai...