Výnimky. Kedy a prečo? – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výnimky. Kedy a prečo? – Java – Fórum – Programujte.comVýnimky. Kedy a prečo? – Java – Fórum – Programujte.com

 

thomas
~ Anonymní uživatel
8 příspěvků
25. 5. 2015   #1
-
0
-

Zdravím ľudia. Prosím vás, vie mi niekto povedať niečo o výnimkách? Prečo ich použiť, kedy.. O čo vlastne ide ? v literatúre som našiel naozaj málo..viac menej len to ako ich nakodiť..ale stále neviem prečo majú takú váhu akú majú...robím projekt do školy a musím dodržať to, že tam bude pár výnimiek, ale vo všeobecnosti neviem kedy, ako a prečo ich použiť

Nahlásit jako SPAM
IP: 213.181.130.–
ingiraxo+15
Grafoman
25. 5. 2015   #2
-
+1
-
Zajímavé

#1 thomas
to je poměrně jednoduchý... zkusim to popsat na pár příkladech...

už v samotný javě existuje plno různých metod, který můžou padnout na různých událostech a pokud neodchytíš vyjímku, tak ti ve většině případech spadne celá app (pokud se jedná o systémovou)

naprosto typická vyjímka je IOException, kterou vyhazuje plno metod, který pracujou s IO (např. čtení/zápis do souborů, streamů apod.),.. si představ, že se pokusíš třeba zapsat něco do souboru, ale kvůli tomu, že ho již jiná aplikace používá, tak ti to vyhodí vyjímku a pokud by si ji neodchytil, tak crash

konkrétně zrovna IOException neni runtime vyjímka, takže jí musíš ošetřit vždy, ale pro představu snad stačí

potom si vyjímky můžeš naimplementovat i ve vlastních metodách.. např. pokud parametr metody bude mít špatnej formát, bude null nebo cokoliv, tak můžeš vyhodit vyjímku a už je na uživateli jak se v takovým případě zachová

představ si, že máš vlastní metodu, která se připojí k serveru a třeba stáhne obrázek na disk do souboru... chcípnout to může hned na několika místech - přípojení k síti, k serveru, chyba při stahování, otevření souboru, zápisu,... pro tyhle případy si klidně vytvoříš vlastní vyjímky a metoda bude vyhazovat třeba "ConnectionException", "DownloadException", "IOException" a když uživatel bude metodu používat a nastane nějaká vyjímka, tak si může díky try-catch pořašit co se má stát, když třeba selže připojení k serveru apod.

potom je dobrý rozlišovat mezi runtime a system vyjímkama a zvolit je na správných místech, můžeš taky odchytit vyjímku, udělat při odchycení nějakou logiku a poslat vyjímku dál, ale to už je spíše ve větších app a ně ve školních

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
JirkaEr0
Newbie
26. 5. 2015   #3
-
+1
-
Zajímavé

Dobrým příkladem, kdy využít výjimky by mohl být tento:

Programuješ svůj modul, který se stará o připojení k databázi. V něm si vyhodíš několik vlastních výjimek (třeba ConnectionException, WrongParamException).

Následně v aplikaci, kde tento modul budeš používat, zachytáváš právě ty výjimky, které vyhazuje tvůj modul. Navíc to má tu výhodu, že při změně databáze, si pouze přepíšeš svůj modul, který se o připojení stará a samostatná aplikace se nemění (včetně těch výjimek, které odchytáváš).

Jiným příkladem vlastních výjimek může být webová služba. Navenek nechceš vyhazovat všechny možné výjimky, ale můžeš je zaobalit například do BusinessException nebo TechnicalException. Pak ten, kdo tvou webovou službu používá uvidí jen tyto dvě výjimky (samozřejmě s nějakým rozumným popisem) a nedostane se k němu třeba výjimky z modulu (připojení do databáze) ConnectionException.

Nahlásit jako SPAM
IP: 193.179.215.–
Flowy0
Věrný člen
26. 5. 2015   #4
-
+1
-
Zajímavé

normalne je ze metoda ma nejaky vstup (parametre) a nejaky vystup ... pri konverzii vstupu na vystup ale moze nastat vynimka

najcastejsie vynimky su NullPointerException, IllegalArgumentException a IllegalStateException ... null pointer dostanes ked to nerobis objektovo a niekto ti namiesto objektu posle null (tato sa vecsinou vytvori automaticky ked volas clenov toho objektu - ktory je ale null)

illegal argument je ked ti niekto posle zly parameter ... napr prijimas String o dlzke max 20 znakov a on ti posle 21 alebo pri hesle das podmienku aspon jedno velke pismenu a on ti ho neposle (v tomto pripade sa moze oplatit vytvorit si vlastnu exception ktora rozsiruje illegal argument aby si ju vedel lepsie zachytit)

illegal state je ked mas nejaku vrstvu ktora si uklada stav a nieje mozne vykonat metodu teraz ... napr auto sa ti moze pokazit a ked od neho chces aby jazdilo tak parametre mozu byt spravne ale je v zlom stave

je trochu problem rozlisit kedy ma byt chyba checked a kedy unchecked ... ked ich das vsetky ako RuntimeException tak by si mal pisat javadoc aby si vedel co sa moze stat ale zase nemusis ich vsetky zachytavat ... ked ich das vsetky ako checked tak ich musis vsetky riesit cez try catch co vie priniest vela bordelu do kodu ... musis si vzdy predstavit ako by sa to malo pouzivat

https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Nahlásit jako SPAM
IP: 95.103.146.–
https://github.com/Flowy
thomas
~ Anonymní uživatel
8 příspěvků
26. 5. 2015   #5
-
0
-

Dik moc teraz už tomu celkom rozumiem (dúfam) idem to poskúšať v nejakých menších veciach a potom v niečom väčšom..pre mňa je väčšia aj moja práca do školy..zatial. Pomohli ste mi, máte velké plus :) 

Nahlásit jako SPAM
IP: 213.181.130.–
Kit+15
Guru
26. 5. 2015   #6
-
0
-

#1 thomas
Když voláš nějakou funkčnost v programu, tak předpokládáš, že to dopadne dobře a obdržíš nějaký výsledek nějakého typu. Občas se něco nepodaří a nedostaneš žádný výsledek. Nějak však musíš zjistit, proč jsi ten výsledek nedostal. Zpráva o chybě má ale jinou strukturu a proto se musí přenášet jiným způsobem než výsledek. Nejlépe výjimkami.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
26. 5. 2015   #7
-
0
-

#6 Kit
Když voláš nějakou funkčnost v programu, tak předpokládáš, že to dopadne dobře a obdržíš nějaký výsledek nějakého typu.

to plati pri unchecked exception ktore necakas ze nastanu ... pri checked exception cakas ze to dopadne dobre alebo dostanes vysledok s chybou ktoru by si mal vyriesit 

tiez sa neoplati povazovat kazdu deviaciu za exception ... nespravne heslo moze byt exception ale stlacenie cancel vo vyskakovacom okne sa oplati riesit inak ... pri vytvarani exception sa musi zbierat stacktrace ktory moze byt znacne dlhy

Nahlásit jako SPAM
IP: 95.103.146.–
https://github.com/Flowy
Kit+15
Guru
26. 5. 2015   #8
-
0
-

#7 Flowy
Nevidím důvod, proč by cancel ve vyskakovacím okně měl vyvolávat výjimku. Vždyť to není chyba!

Argumentaci o délce stacktrace považuji za nesmyslnou. Výjimky nemají sloužit pro řízení programu, ale pokud dojde k chybě, vyhazuji výjimku bez ohledu na délku stacktrace.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
26. 5. 2015   #9
-
0
-

#8 Kit
důvod třeba nevidíš, ale ve skutečnosti vyhodit vyjímku může i cancel.. vem si třeba příklad z close() u streamu, kde taktéž nedává smysl vyhazovat vyjímku (aspoň mě), ale vyhazuje se.. nikdy nevíš, co ta logika za tím dělá a který zavírací nebo ukončovací operace můžou vyhodit vyjímku

v javě tohle platí dvojnásob, tady vyhazuje vyjímku i blbí uspání vlákna..

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Prečo sa to vypína? — založil delphak

Kedy vykĺzne Windows 7 — založil Anonymní uživatel

Kedy pouzit unique_ptr — založil Rtt

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý