Tässä opetusohjelmassa opit kokeilemaan Java-kokeilulauseketta esimerkkien avulla.
try… catch
Lohko Java käytetään kahvan poikkeuksia ja estää epänormaali lopetus ohjelman.
Tässä on try… catch
Java-lauseen syntaksi .
try( // code ) catch(exception) ( // code )
try
Lohko sisältää koodia, joka saattaa syntyä poikkeus.
catch
Lohko sisältää koodin, joka suoritetaan, kun siellä tapahtuu poikkeus sisällä try
lohko.
Esimerkki: 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()); ) ) )
Tuotos
Aritmeettinen poikkeus => / nollalla
Huomaa yllä olevassa esimerkissä viiva,
int divideByZero = 5 / 0;
Tässä yritämme jakaa luvun nollalla . Tässä tapauksessa tapahtuu poikkeus. Siksi olemme liittäneet tämän koodin try
lohkon sisälle .
Kun ohjelma kohtaa tämän koodin, ArithmeticException
tapahtuu. Ja catch
lohko tarttuu poikkeukseen ja suorittaa koodin catch
lohkon sisällä .
catch
Lohko suoritetaan vain, jos on olemassa poikkeus sisällä try
lohko.
Huomaa : Java: ssa voimme käyttää try
lohkoa ilman catch
lohkoa. Emme kuitenkaan voi käyttää catch
lohkoa ilman try
lohkoa.
Java-kokeilu… lopulta estä
Voimme myös käyttää try
lohkoa yhdessä viimeisen lohkon kanssa.
Tässä tapauksessa viimeinen lohko suoritetaan aina riippumatta siitä, onko kokeilulohkossa sisällä poikkeusta vai ei.
Esimerkki: Java try … lopulta estää
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Tuotos
Lopuksi lohko suoritetaan aina. Poikkeus säikeessä "main" java.lang.ArithmeticException: / nollalla Main.mainissa (Main.java:4)
Yllä olevassa esimerkissä olemme käyttäneet try
lohkoa finally
lohkon kanssa. Voimme nähdä, että try
lohkon sisällä oleva koodi aiheuttaa poikkeuksen.
finally
Lohkon sisällä oleva koodi suoritetaan kuitenkin poikkeuksesta riippumatta.
Java yrittää… kiinni … lopulta estää
Java-ohjelmassa voimme käyttää myös viimeistä lohkoa lohkon jälkeen try… catch
. Esimerkiksi,
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(); ) )
Tuotos
Syötä kokeilulauseke Poikkeus => Hakemisto 5 rajojen ulkopuolelta pituudelle 5 Sulkeutuva PrintWriter
Yllä olevassa esimerkissä olemme luoneet taulukon nimeltä luettelo ja tiedoston nimeltä output.txt. Tässä yritämme lukea tietoja taulukosta ja tallentaa tiedostoon.
Huomaa koodi,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Tässä taulukon koko on ja taulukon 5
viimeinen elementti on list(4)
. Yritämme kuitenkin käyttää elementtejä osoitteessa a(5)
ja a(6)
.
Näin ollen koodi luo poikkeuksen, jonka kiinnipitolohko tarttuu.
Koska finally
lohko suoritetaan aina, olemme sisällyttäneet koodin PrintWriter
viimeisen lohkon sisäosan sulkemiseksi .
On hyvä käytäntö käyttää viimeistä estoa tärkeän puhdistuskoodin sisällyttämiseen, kuten tiedoston tai yhteyden sulkeminen.
Huomaa : Joissakin tapauksissa finally
lohko ei toteudu:
- Käyttö
System.exit()
menetelmän finally
Lohkossa esiintyy poikkeus- Langan kuolema
Useita Catch-lohkoja
Jokaiselle try
lohkolle voi olla nolla tai enemmän catch
lohkoja. Useiden catch
lohkojen avulla voimme käsitellä kutakin poikkeusta eri tavalla.
Kunkin catch
lohkon argumenttityyppi osoittaa sen tyypin poikkeuksen, jota se voi käsitellä. Esimerkiksi,
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(); ) )
Tuotos
IndexOutOfBoundsException => Indeksi 10 ulos rajoista pituudelle 10
Tässä esimerkissä olemme luoneet kokonaisluvun taulukon, jonka nimi arr
on koko 10 .
Koska taulukkoindeksi alkaa nollasta , taulukon viimeinen elementti on kohdassa arr(9)
. Huomaa lausunto,
arr(10) = 11;
Tässä yritämme määrittää arvon indeksille 10 . Siksi IndexOutOfBoundException
tapahtuu.
Kun try
lohkossa tapahtuu poikkeus ,
- Poikkeus heitetään ensimmäiseen
catch
lohkoon. Ensimmäinencatch
lohko ei käsittele ryhmääIndexOutOfBoundsException
, joten se siirretään seuraavaancatch
lohkoon. catch
Yllä olevan esimerkin toinen lohko on sopiva poikkeuskäsittelijä, koska se käsitteleeIndexOutOfBoundsException
. Siksi se toteutetaan.
Useiden poikkeusten saaminen
Java SE 7: stä ja uudemmista voimme nyt saada useamman kuin yhden tyyppisen poikkeuksen yhdellä catch
lohkolla.
Tämä vähentää koodin päällekkäisyyttä ja lisää koodin yksinkertaisuutta ja tehokkuutta.
Jokainen catch
lohkon käsittelemä poikkeustyyppi erotetaan pystysuoralla palkalla |
.
Sen syntaksi on:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Lisätietoja on osoitteessa Java, jossa on useita poikkeuksia.
Java kokeile resursseja -lauseke
Kokeile jossa varojen selvitys on yrittää ilmoitus, että on yksi tai useampi resurssi ilmoituksista.
Sen syntaksi on:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Resurssi on objekti, joka suljetaan ohjelman lopussa. Se on ilmoitettava ja alustettava kokeilulausekkeessa.
Otetaan esimerkki.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Kokeile with-resurssit lausunto kutsutaan myös automaattiseen resurssienhallinnan . Tämä lause sulkee kaikki resurssit lauseen lopussa.
Jos haluat lisätietoja, käy java try-with-resources -lausekkeessa.