Deo zbornika Učimo Javu
Izbacivanje izuzetaka u Javi
Ako unutar neke metode ne želimo eksplicitno hvatati neki izuzetak (exception), možemo pomoću ključne riječi throws
proglasiti da će ga metoda, u slučaju da se pojavi, izbaciti. Na primer:
public static void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[256];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1) break;
out.write(buffer, 0, bytesRead);
}
}
To prenosi odgovornost na pozivačku metodu, koja nakon toga promatranu metodu mora pozvati unutar try-catch
bloka:
try {
imeMetode();
}
catch(IOException e) {
e.printStackTrace();
}
Izbacivanje više izuzetaka
Pojedina metoda može izbaciti i više izuzetaka raznih tipova. U tom slučaju klase izuzetaka se nabrajaju, odvojene zarezima. Na primjer:
public BigDecimal divide(BigDecimal val, int roundingMode) throws ArithmeticException, IllegalArgumentException
Izbacivanje izvršnih izuzetaka
Možete deklarirati da metoda izbacuje i runtime exceptions, ali ne morate. Glavna svrha toga je dokumentacija za programera. Pogledajmo primjer:
public class Clock {
int hours; // 1-12
int minutes; // 0-59
int seconds; // 0-59
public Clock(int hours, int minutes, int seconds) {
if (hours < 1 || hours > 12) {
throw new IllegalArgumentException("Sati moraju biti izmedju 1 i 12");
}
if (minutes < 0 || minutes > 59) {
throw new IllegalArgumentException("Minute moraju biti izmedju 0 i 59");
}
if (seconds < 0 || seconds > 59) {
throw new IllegalArgumentException("Sekunde moraju biti izmedju 0 i 59");
}
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
}
public Clock(int hours, int minutes) {
this(hours, minutes, 0);
}
public Clock(int hours) {
this(hours, 0, 0);
}
}
Izvor: Elliotte Rusty Harold, Java Lecture Notes, preveo Draško Budin, priredio Damjan Pavlica.