Java - Vyjímky (34.díl)

Napsal O webu (») 5. 6. 2008 v kategorii Programování, přečteno: 2658×
obrazky/java_logo.png

Tvorba vlastních výjimek

V Javě lze vytvořit vlastní třídy výjimek. Postup se používá v případě, kdy chceme sami defnovat a ošetřit u jiné třídy stavy, které budeme považovat za chybové. Takového stavu může být dosaženo při splnění/nesplnění nějaké podmínky (např. vstupní hodnoty ležící mimo zadaný interval) a není možno ho odchytit běžným mechanismem výjimek, se kterým jsme se seznámili výše.

Tyto třídy budou vytvářeny děděním od třídy Exception, bude se jednat o synchronní výjimky; princip jejich ošetřování je stejný. Často je používáme proto, abychom odlišili chybové stavy skutečné (konverzní, aritmetické operace) a chybové stavy námi navržené (při splnění či nesplnění nějaké podmínky), kdy by běh programu (tj. výpočet) nemohl efektivně pokračovat.

Praktický postup ukážeme naznačíme při výpočtu faktoriálu, kdy vstupní údaje budou muset ležet v intervalu <0,40>. Na rozdíl od předchozího příkladu nebudeme volat výjimku třídy ArithmeticException, ale výjimku třídy vlastní, kterou nazveme FaktorialException.
public class FactorialException extends Exception
{
public FactorialException()
{
super (Zadana hodnota mimo interval);
}
}

Třída ArithmeticException obsahuje konstruktor volající konstruktor rodičovské třídy Exception s parametrem představujícím řetězec nesoucí informaci pro uživatele. Pokud vstupní hodnota neleží v intervalu <0,40> je vyvolána výjimka třídy FactorialException. Upravme metodu faktorial() tak, aby na tento stav reagovala.
public int faktorial (int n) throws FactorialException
{
if (n>40)||(n<0) throw new FactorialException();
else if n>0 return n*faktorial(n-1);
else return 1;
}

V metodě main() nesmíme zapomenout ošetřit výjimku třídy FactorialException v bloku catch.
public static void main(String[] args) {
try
{
Faktorial f=new Faktorial();
int c=f.nacti();
int fakt=f.faktorial(c);
System.out.println(c+"!="+fakt);
}
catch (IOException e)
{
System.out.println("Chyba pri vstupu dat.");
e. printStackTrace();
}
catch (FactorialException e)
{
System.out.println("Nelze vypocitat faktorial");
e. printStackTrace();
}
}

Zadáme -li hodnotu ležící mimo zadaný interval, obdržíme chybové hlášení o výjimce.
Nelze vypocitat faktorial
Balicek.FaktorialException: Zadana hodnota mimo interval
at Balicek.Obdelnik.<init>(Faktorial.java:14)
at Balicek.Main.main(Main.java:29)


Jak jsme z výše uvedených příkladů viděli, práce s výjimkami v Javě je velmi podobná práci s výjimkami v jazyce C++. Java je na rozdíl od C++ bezpečnější, provádí kontrolu ošetření výjimek na úrovni kompilátoru, nikoliv jen jejich ošetření za běhu.

Autor: Filip Koval
Štítky: Java
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel pět a šest