Deo zbornika Učimo Javu
Izuzeci (exceptions)
Tradicionalni programski jezici se služe postavljanjem zastavica i specifičnim povratnim vrijednostima (npr. -1) da bi naznačili neki problem nastao tokom izvršavanja programa. Java se služi konceptom izbacivanja izuzetaka (exception throwing).
Prednosti ovog pristupa su:
- Prisiljava programera na provjeru pogrešaka (iznimku, za razliku od zastavice, nije moguće ignorirati).
- Program je pregledniji jer je kod za obradu pogrešaka jasno odvojen od ostalog koda (tako algoritam nije zagađen mnoštvom
if-else
blokova koji provjeravaju zastavice i povratne vrijednosti). - Algoritam je moguće implementirati efikasnije.
Pogledajmo sljedeći program:
public class HelloThere {
public static void main(String[] args) {
System.out.println("Hello " + args[0]);
}
}
Pretpostavimo da ga izvršimo bez argumenata, dakle ne postoji args[0]. Java runtime system bi izbacio iznimku ArrayIndexOutOfBoundsException
i završio program.
% javac HelloThere.java
% java HelloThere
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at HelloThere.main(HelloThere.java:5)
Vrste izuzetaka
Iznimke ili uzuzeci su objekti neke podklase klase java.lang.Throwable. Mogu biti:
- Provjerene iznimke (Checked Exceptions)
- Pogreške (Errors)
- Izvršne iznimke (Runtime Exceptions)
Provjerene iznimke moraju se obraditi u vrijeme kompiliranja. Izvršne iznimke ne moraju. Pogreške obično ne mogu. Ovdje je dio hijerarhijskog stabla klase Throwable:
java.lang.Object
|
+---java.lang.Throwable
|
+---java.lang.Error
|
+---java.lang.Exception
|
+---java.io.IOException
|
+---java.lang.RuntimeException
|
+---java.lang.ArithmeticException
|
+---java.lang.ArrayIndexOutOfBoundsException
|
+---java.lang.IllegalArgumentException
|
+---java.lang.NumberFormatException
Glavnina koda nalazi se u klasi java.lang.Throwable
. Većina njenih podklasa samo donosi nove konstruktore koji mijenjaju poruku iznimke.
Izvor: Elliotte Rusty Harold, Java Lecture Notes, preveo Draško Budin, priredio Damjan Pavlica.