Vlastní výjimky - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Java

Vlastní výjimky

java

28. února 2002, 00.00 | V dnešním dílu o výjimkách v Javě se podívame na vytváření vlastních výjimek, jejich vyvolání a také na to, jak by mohla vypadat reakce na výjimku, ale také jak by v žádném případě vypadat neměla.

Jak jsem slíbil, dnes se povídáme na vytváření vlastní výjímky a následně její vyvolání. Mimo to si ukážeme, jak by mohla vypadat reakce na výjimku. Ale také jak by v žádném případě vypadat neměla.

Vytvoření vlastní výjimky

Vlastní výjimka velmi úzce souvisí s psaním vlastních tříd. Vytváříme-li vlastní výjimky téměř vždy se jedná o synchronní výjimky. Tedy takové, které se musí ošetřit. To znamená, že vytvořená výjimka je potomkem Exception.

Vlastní výjimky není složité vytvořit. Přesněji řečeno třídy, která má předky Exception.

class  UnknownVersionException extends  Exception {
     public  UnknownVersionException() {
     }

     public  UnknownVersionException(String  msg) {
          super(msg);
     }
}

Je možné rozšířit prázdnou výjimku o nějaký statický text — vámi staticky dosazený. Či přijatý text v parametru upravit podle libosti.

Vyvolání výjimky

S vytvořením vlastní nové výjimky bezprostředně souvisí i její vyvolání. Na co by byla výjimka, která nikdy nenastane. Vlastní vyvolání výjimky se provádí příkazem throw s určením výjimky, kterou má vyhodit.

Mohlo by to vypadat následovně:

     ...
     if  (ver == null  ) {
          throw  UnknownVersionException();
     }

Takovým to způsobem ji vyvoláme sami. Ale často (např. v bloku catch) jsme obdrželi již vzniklou výjimku pod námi definovaným názvem a není nutné ji vytvářet znovu. Proto spíše uvidíme:

     try  {
          ...
     }
     catch  (Exception e) {
          throw  e;
     }

Na závěr se pojďme podívat na to, jak by se opravdu nemělo reagovat na výjimku. A naopak, jak by se mohlo.

Nejhorší reakce na výjimku

Jak jsem zde již určitě naznačil. Nejhorší reakcí na výjimku je nulová reakce tzn. kompiler mě donutí napsat kód pro ošetření výjimky (try – catch), ale už mě nemůže donutit, abych to toho catch něco napsat. Takto napsaný program se pak chová následným způsobem. Zpracovává kód, vyskytne se výjimka, žádná reakce, program pokračuje dál jako by se nechumelilo. U takových to programů se pak nestačíte divit co dělají.

Na papíře takové ošetření vypadá asi takto:

import  java.io.*;

public  class  MyFileRead
{
     public  static  void  main(String  [] args)
     {
     try  {
          BufferedReader myfile = new  BufferedReader (new  FileReader ("a.txt"));
          String  S;
          while  ((S = myfile.readLine()) != null  ) {
               System.out.println(S);
          }
          myfile.close();
     }
     catch  (IOException e) {
// NECHYBÍ VÁM ZDE NĚCO
     }
     }
}

Předešlý způsob používá až mnoho programátorů. Přiznám se i já, ale jen občas!

Přijatelná reakce na výjimku

Mluvili-li jsme předtím o tom nejhorším způsobu, jak reagovat resp. nereagovat na výjimku, tak jsem asi zapomněl říci, proč se tento způsob používá. Často to je místo, kde si programátor je „jistý“ , že zde výjimka nenastane. Zatímco kompiler trvá na jejím ošetření.

Nulové ošetření výjimky lze jediným řádkem změnit v celku dobré. Ve smyslu, že alespoň víme, že nějaká nastala a navíc kde a jaká.

     try  {
          ...
     }
     catch  (IOException e) {
          e.printStackTrace();
     }

U zachycené výjimky je také možné získat její text, a pokud se vám nelíbí, tak ho změnit.

...
     try  {
          ...
     }
     catch  (IOException e) {
          String  s = e.getMessage();
          if  (s == null) { System.out.println("I/O ERR"); }
               else  { System.out.println(s); }
     }
...

To je pro dnešek vše. Výjimky jsme dokončili, proto se příště podíváme na novinku v Javě 2 verze 1.4 v podobně Assertion Facility, které bezprostředně souvisí s výjimkami jako takovými.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Java  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: