U vodiču ćemo uz primjere naučiti o različitim pristupima rukovanja iznimkama u Javi.
U prošlom uputstvu saznali smo o Java iznimkama. Znamo da iznimke nenormalno prekidaju izvršavanje programa.
Zbog toga je važno postupati s iznimkama. Evo popisa različitih pristupa za rukovanje iznimkama u Javi.
- pokušajte … uhvatiti blok
- konačno blokirati
- baci i baci ključnu riječ
1. Java pokušaj … catch block
Blok try-catch koristi se za obradu iznimaka u Javi. Evo sintakse try… catch
bloka:
try ( // code ) catch(Exception e) ( // code )
Ovdje smo unutar try
bloka postavili kôd koji bi mogao generirati iznimku . Nakon svakog try
bloka slijedi catch
blok.
Kad se dogodi iznimka, catch
blok je uhvati . catch
Blok ne može se koristiti bez try
bloka.
Primjer: Obrada iznimke pomoću pokušaja… ulov
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Izlaz
ArithmeticException => / nula
U primjeru pokušavamo podijeliti broj sa 0
. Ovdje ovaj kod generira iznimku.
Da bismo riješili iznimku, stavili smo kôd 5 / 0
unutar try
bloka. Sada kada se dogodi iznimka, ostatak koda unutar try
bloka se preskače.
catch
Blok hvata iznimka i izvještaji unutar catch blok se izvršava.
Ako niti jedan izraz u try
bloku ne generira iznimku, catch
blok se preskače.
2. Java konačno blokira
U Javi se finally
blok uvijek izvršava bez obzira postoji li iznimka ili ne.
finally
Blok je opcionalno. I za svaki try
blok može postojati samo jedan finally
blok.
Osnovna sintaksa finally
bloka je:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Ako se dogodi iznimka, finally
blok se izvršava nakon try… catch
bloka. Inače se izvršava nakon bloka try. Za svaki try
blok može postojati samo jedan finally
blok.
Primjer: Rukovanje izuzecima Java koristeći konačno blok
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Izlaz
ArithmeticException => / po nuli Ovo je napokon blok
U gornjem primjeru unutar bloka dijelimo broj s 0try
. Ovdje ovaj kod generira ArithmeticException
.
Izuzetak zahvaća catch
blok. I tada finally
se izvršava blok.
Napomena : Dobra je praksa koristiti finally
blok. To je zato što može sadržavati važne kodove za čišćenje poput,
- kôd koji se slučajno može preskočiti povratkom, nastavkom ili prekidom
- zatvaranje datoteke ili veze
3. Java bacanje i bacanje ključne riječi
throw
Ključna riječ Java koristi se za izričito izbacivanje jedne iznimke.
Kad smo throw
iznimka, tok programa se kreće od try
bloka do catch
bloka.
Primjer: Rukovanje iznimkama pomoću Java bacanja
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Izlaz
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:5) at Main.main(Main.java:9)
In the above example, we are explicitly throwing the ArithmeticException
using the throw
keyword.
Similarly, the throws
keyword is used to declare the type of exceptions that might occur within the method. It is used in the method declaration.
Example: Java throws keyword
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Output
java.io.FileNotFoundException: test.txt (The system cannot find the file specified)
When we run this program, if the file test.txt does not exist, FileInputStream
throws a FileNotFoundException
which extends the IOException
class.
findFile()
Metoda navodi da IOException
može biti izbačen. main()
Metoda naziva ovu metodu i obrađuje iznimku ako je bačena.
Ako metoda ne obrađuje iznimke, vrsta iznimki koje se mogu pojaviti unutar nje mora biti navedena u throws
klauzuli.
Da biste saznali više, posjetite Java bacanje i bacanje.