Naučte se Javu – standardní výjimky
Pokud jste se již naučili mechanismus výjimek, pochopili jejich účel, generování a zpracování (odchytání), zkuste se podívat na výjimky, které jsou v Javě standardně obsažené.
Těch je poměrně velké množství (120 až 180 podle verze JDK), se všemi se však běžně nesetkáme. Mnoho jich totiž generuje jedna standardní třída Javy, aby je jiná standardní třída zpracovala a k běžnému programátorovi se tak vůbec nedostanou. Uděláme si přehled těch častých, s nimiž se při programování pravděpodobně budete setkávat.
java.lang.Exception – předchůdce všech výjimek. Pokud chcete odchytit všechny výjimky a nereagovat speciálním způsobem na konkrétní problém, stačí napsat:
try {
… // kód generující výjimku
} catch (Exception e) {
System.out.println(„Nastala vyjimka: „+e.toString());
}
java.lang.ArithmeticException – výjimka při aritmetických výpočtech. Tato výjimka nastává například při dělení nulou.
java.lang.ArrayIndexOutOfBoundsException – přístup k položce pole s neexitujícím indexem. Tato výjimka nastane například v následujícím kódu:
Object x[] = new String[2];
x[0] = „Ahoj“;
x[1] = „Nazdar“;
x[2] = „Cau“ // vyvolá výjimku ArrayIndexOutOfBoundsException
java.lang.ClassCastException – výjimka je vyvolána v případě přetypování objektu na podtyp třídy, jejíž není instance. Přetypování na typ Object a zpět se v Javě používá poměrně často, například při ukládání objektů do seznamu. Následující kód vyvolá výjimku ClassCastException
:
Object x = new Integer(0);
System.out.println((String)x);
java.lang.IndexOutOfBoundsException – indikuje, že index (v poli, v řetězci či ve vektoru) je mimo povolený rozsah. Tato třída má podtřídy ArrayIndexOutOfBoundsException
a StringIndexOutOfBoundsException
.
java.lang.NegativeArraySizeException – výjimka vznikne, pokud se program pokusí vytvořit pole se zápornou velikostí.
java.lang.NullPointerException – toto je velmi obvyklá výjimka, která nastává při práci s proměnnou, která obsahuje hodnotu null
. Aplikace samy mohou a měly by generovat tuto výjimku ve vlastních metodách, pokud je jim chybně předán parametr s hodnotou null
. Natává v těchto případech:
- volání metody
null
-ového objektu - přístup k proměnné
null
-ového objektu - zjištění délky pole nebo přístup k poli, které má hodnotu
null
- vyhození hodnoty null v proměnné typu
Throwable
místo konkrétní výjimky
java.lang.NumberFormatException – výjimka indikuje pokus o převod řetězce na některý číselný typ v případě, že řetězec nemá patřičný typ. Příklad použití:
String vstupniRetezec = nactiVstup();
try {
long cislo = Long.parseLong(args[0]);
}
catch (NumberFormatException e) {
System.out.println(„Zadaný vstup nebyl celé číslo!“);
}
java.lang.RuntimeException – tato výjimka je nadtřídou všech výjimek, které mohou nastat při běžném kroku Virtuálního stroje (JVM) a není nutné ji v programu odchytávat. Její podtřídy z uvedených výjimek jsou například ArithmeticException
, IndexOutOfBoundsException
, NegativeArraySizeException
nebo NullPointerException
.
java.lang.StringIndexOutOfBoundsException – výjimka indikuje přístup ke znaku řetězce (metoda String.charAt()
) s neexistujícím indexem.
java.io.EOFException – nastává při pokusu o čtení za koncem souboru či jiného vstupního proudu.
java.io.FileNotFoundException – nastává při pokusu otevřít soubor s neexitujícím jménem.
java.io.IOException – výjimka, která je nadtřídou všech výjimek souvisejících se vstupy a výstupy (například FileNotFoundException
nebo EOFException
).
java.io.InterruptedIOException – signalizuje, že vstupně-výstupní operace byla přerušena.
java.netSocketException – signalizuje chybu při komunikaci přes TCP sockety (například selhání připojení). Tato třída je nadtřídou pro třídy BindException
, ConnectException
a NoRouteToHostException
, které odpovídají konkrétním chybám při navazování komunikace.
java.net.MalformedURLException – výjimka nastává v případě, že zadaná URL adresa má chybný formát. Například může být zadán neexistující protokol nebo adresa ve špatném formátu.
java.lang.NoSuchElementException – tuto výjimku vyvolává metoda nextElement()
v případě, že již neexistuje další požadovaný element objektu Enumeration
. Tento objekt se používá pro sekvenční přístup k položkám seznamu.
Výjimky se musí odchytávat
Několikrát už bylo zmíněno, že výjimky, které nejsou potomky tříd Error
nebo RuntimeException
je v Javě třeba odchytávat. Co to ale znamená? Co když je neodchytíme a jak se vlastně dozvíme, že je máme odchytávat?
Fakt, že daný příkaz může určitou výjimku způsobit, se dozvíme v dokumentaci Javy u daného příkazu. Jedná-li se o naši vlastní třídu, musíme to prostě vědět. Když tuto výjimku neošetříme, kompilátor Javy nepovolí kompilaci třídy a ohlásí chybu – neošetřenou výjimku (dozvíte se kterou výjimku a kde).
Mohlo by vás také zajímat
-
Monitory OLED: klíčové pojmy a funkce
13. května 2024 -
Umělá inteligence v IT
27. září 2023 -
Thunderbolt 4 vs. OCuLink: Přišel čas na upgrade?
27. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024
Hawran
Kvě 7, 2013 v 21:17nepochopil jsem:java.lang.ArrayIndexOutOfBoundsException
pise mi to kdyz chci odeslat sms z mobilu pres internet zadarmo a pise mi to „java.lang.ArrayIndexOutOfBoundsException – 0“ jak to mám opravit a co to vlastně znamená?
jde to opravit nebo mám zkusit přeinstalovat aplikaci?