Java try ... catch (esimerkkien avulla)

Tässä opetusohjelmassa opit kokeilemaan Java-kokeilulauseketta esimerkkien avulla.

try… catchLohko Java käytetään kahvan poikkeuksia ja estää epänormaali lopetus ohjelman.

Tässä on try… catchJava-lauseen syntaksi .

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

tryLohko sisältää koodia, joka saattaa syntyä poikkeus.

catchLohko sisältää koodin, joka suoritetaan, kun siellä tapahtuu poikkeus sisällä trylohko.

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 trylohkon sisälle .

Kun ohjelma kohtaa tämän koodin, ArithmeticExceptiontapahtuu. Ja catchlohko tarttuu poikkeukseen ja suorittaa koodin catchlohkon sisällä .

catchLohko suoritetaan vain, jos on olemassa poikkeus sisällä trylohko.

Huomaa : Java: ssa voimme käyttää trylohkoa ilman catchlohkoa. Emme kuitenkaan voi käyttää catchlohkoa ilman trylohkoa.

Java-kokeilu… lopulta estä

Voimme myös käyttää trylohkoa 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 trylohkoa finallylohkon kanssa. Voimme nähdä, että trylohkon sisällä oleva koodi aiheuttaa poikkeuksen.

finallyLohkon 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 5viimeinen 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 finallylohko suoritetaan aina, olemme sisällyttäneet koodin PrintWriterviimeisen 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 finallylohko ei toteudu:

  • Käyttö System.exit()menetelmän
  • finallyLohkossa esiintyy poikkeus
  • Langan kuolema

Useita Catch-lohkoja

Jokaiselle trylohkolle voi olla nolla tai enemmän catchlohkoja. Useiden catchlohkojen avulla voimme käsitellä kutakin poikkeusta eri tavalla.

Kunkin catchlohkon 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 arron 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 IndexOutOfBoundExceptiontapahtuu.

Kun trylohkossa tapahtuu poikkeus ,

  • Poikkeus heitetään ensimmäiseen catchlohkoon. Ensimmäinen catchlohko ei käsittele ryhmää IndexOutOfBoundsException, joten se siirretään seuraavaan catchlohkoon.
  • catchYllä olevan esimerkin toinen lohko on sopiva poikkeuskäsittelijä, koska se käsittelee IndexOutOfBoundsException. Siksi se toteutetaan.

Useiden poikkeusten saaminen

Java SE 7: stä ja uudemmista voimme nyt saada useamman kuin yhden tyyppisen poikkeuksen yhdellä catchlohkolla.

Tämä vähentää koodin päällekkäisyyttä ja lisää koodin yksinkertaisuutta ja tehokkuutta.

Jokainen catchlohkon 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.

Mielenkiintoisia artikkeleita...