Šioje pamokoje su pavyzdžių pagalba sužinosime apie „Java“ bandymo sugauti teiginį.
„ try… catch
Java “ blokas naudojamas išimtims tvarkyti ir apsaugo nuo nenormalaus programos nutraukimo.
Čia yra „ try… catch
Java“ bloko sintaksė .
try( // code ) catch(exception) ( // code )
try
Blokas apima kodą, kuris gali generuoti išimtį.
catch
Blokas apima kodą, kuris yra vykdomas, kai įvyksta viduje išimtis try
bloką.
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 try
bloko viduje .
Kai programa susiduria su šiuo kodu, ArithmeticException
įvyksta. Išimtis catch
blokuoja bloką ir vykdo kodą catch
bloko viduje .
catch
Blokas tik įvykdytas, jei egzistuoja viduje išimtis try
bloką.
Pastaba : „Java“ sistemoje galime naudoti try
bloką be catch
bloko. Tačiau mes negalime naudoti catch
bloko be try
bloko.
„Java“ pabandykite … pagaliau užblokuokite
Mes taip pat galime naudoti try
bloką 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 try
bloką kartu su finally
bloku. Matome, kad try
bloko viduje esantis kodas sukelia išimtį.
Tačiau finally
bloke esantis kodas vykdomas nepriklausomai nuo išimties.
„Java“ pabandykite … pagauti … pagaliau užblokuokite
„Java“ taip pat galime naudoti paskutinį bloką po try… catch
bloko. 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 5
ir 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 finally
blokas visada vykdomas, mes įtraukėme kodą, kad uždarytume PrintWriter
galutinio 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 finally
blokas nevykdomas:
- Naudojimas
System.exit()
metodu finally
Bloke atsiranda išimtis- Siūlų mirtis
Keli sugavimo blokai
Kiekvienam try
blokui gali būti nulis ar daugiau catch
blokų. Keli catch
blokai leidžia skirtingai elgtis su kiekviena išimtimi.
Kiekvieno catch
bloko 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 try
bloke įvyksta išimtis ,
- 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
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.