IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 1. diel - Výnimky v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:6.5.2013 13:53

try-with-resources je obdoba using v C# ?

Odpovedať
6.5.2013 13:53
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Petr Nymsa
David Hartinger:6.5.2013 13:56

Přesně tak :)

Odpovedať
6.5.2013 13:56
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Kit:7.5.2013 11:01

Do try-with-resources můžeš přece přidat i catch. Nemusíš ho obalovat dalším blokem, pokud nechceš.

public void ulozNastaveni() {
    try (ZapisovacSouboru z = new ZapisovacSouboru("soubor.dat")) {
        z.zapis(objekt);
    } catch (IOException e) {
        System.err.println("Nepodařilo se uložit nastavení.");
    }
}

Vytknul bych i zápis chyb do System.out místo do System.err. Chybová hlášení nepatří do datového výstupu.

Odpovedať
7.5.2013 11:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Kit:7.5.2013 11:18

Ten příklad pro Javu < 7 bych upravil takto:

boolean ulozNastaveni() {
    ZapisovacSouboru z = null;
    try {
        z = new ZapisovacSouboru("soubor.dat");
        z.zapis(objekt);
        return true;
    } catch (IOException e) {
        System.err.println("Chyba při otevírání souboru");
        return false;
    } finally {
        if (z != null)
            try {
                z.close();
            } catch (IOException ex) {
                System.err.println("Chyba při zavírání souboru");
            }
    }
}

Jinak kompilátor řve při zavírání souboru. Tedy pokud to nemáš ošetřeno už v metodě zavři().

Odpovedať
7.5.2013 11:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Kit
David Hartinger:7.5.2013 11:20

Pravda, pravda.

Odpovedať
7.5.2013 11:20
New kid back on the block with a R.I.P
Avatar
Paul
Člen
Avatar
Paul:30.1.2014 14:20

Existuje již pokračování výjimek v Javě? V tomhle díle je zmiňované ale nikde jsem ho nenašel, díky.

 
Odpovedať
30.1.2014 14:20
Avatar
Matěj Kripner
Tvůrce
Avatar
Matěj Kripner:3.8.2014 16:40

Je tu psáno, že blok finally se vykoná vždy, i pokud již došlo k vrácení hodnoty příkazem return. Čistě teoreticky, co by se stalo, kdyby byl v bloku finally další příkaz return? Díky.

 
Odpovedať
3.8.2014 16:40
Avatar
coells
Tvůrce
Avatar
Odpovedá na Matěj Kripner
coells:3.8.2014 19:22

Zkus se zamyslet nad daleko zajímavější (a praktickou) otázkou - co když catch neošetří výjimku, případně provede re-throw, ale ve finally bloku je explicitní return nebo dokonce finally blok způsobí nezávislou výjimku?

 
Odpovedať
3.8.2014 19:22
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovedá na coells
Matěj Kripner:3.8.2014 19:59

Pochybuju, že se blok finally provede opravdu vždy. Co když je vyvolaná výjimka tak závažná, že nelze v programu dále pokračovat.

 
Odpovedať
3.8.2014 19:59
Avatar
coells
Tvůrce
Avatar
Odpovedá na Matěj Kripner
coells:3.8.2014 22:01

Finally blok garantuje provedení instrukcí do té míry, že pokud neprojde finally, neprojde ani další intrukce, která za ním následuje. To je ta lepší varianta, například:

try
{
  System.Exit(0);
}
finally
{
   System.out.println();
}

Ta horší varianta je, že je výjimka tak závažná, že pokus o provedení finally bloku vyvolá další výjimku, která zakryje tu původní.

 
Odpovedať
3.8.2014 22:01
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!