Jak zacházet s výjimkami Java správným způsobem

  • Gabriel Brooks
  • 0
  • 3627
  • 413
reklama

Jako programovací nováček Jak se učit programování bez stresu Jak se učit programování bez stresu Možná jste se rozhodli programovat, ať už pro kariéru nebo jen jako koníček. Skvělý! Ale možná se začínáte cítit ohromeni. Není to tak skvělé. Zde je nápověda, která vám usnadní cestu. , koncept zpracování výjimek může být těžké omotat hlavu kolem. Ne, že koncept sám o sobě je obtížný, ale terminologie může způsobit, že se zdá být vyspělejší, než je. A je to tak mocná funkce, že je náchylná ke zneužití a zneužití.

V tomto článku se dozvíte, jaké jsou výjimky, proč jsou důležité, jak je používat a jak se vyhnout běžným chybám. Nejmodernější jazyky 6 Nejjednodušší programovací jazyky, které se mají učit pro začátečníky 6 Nejjednodušší programovací jazyky, které se mají učit pro začátečníky Naučit se programovat je o nalezení správného jazyka stejně jako o procesu editace. Zde je prvních šest nejjednodušších programovacích jazyků pro začátečníky. mít nějaké zacházení s výjimkami, takže pokud se někdy přestěhujete z Java 7, užitečné triky pro zvládnutí nového programovacího jazyka 7, užitečné triky pro zvládnutí nového programovacího jazyka Je v pořádku být ohromen, když se učíte kódovat. Pravděpodobně zapomenete na věci tak rychle, jak se je naučíte. Tyto tipy vám mohou pomoci lépe si uchovat všechny nové informace. , většinu těchto tipů si můžete vzít s sebou.

Pochopení výjimek Java

V Javě, výjimka je objekt, který označuje něco neobvyklého (nebo “výjimečný”), ke kterému došlo během běhu aplikace. Takové výjimky jsou hozen, což v podstatě znamená vytvoření výjimkového objektu (podobně jako chyby “zvedl”).

Krása je, že můžete úlovek vyvolány výjimky, které vám umožní vypořádat se s neobvyklým stavem a umožnit vaší aplikaci pokračovat v činnosti, jako by se nic nepovedlo. Například, zatímco null ukazatel v C může selhat vaši aplikaci, Java vám umožňuje házet a chytat NullPointerExceptions před nulovou proměnnou má šanci způsobit selhání.

Pamatujte, že výjimka je pouze objekt, ale s jednou důležitou charakteristikou: musí být rozšířena z Výjimka třídy nebo jakékoli podtřídy Výjimka. Zatímco Java má všechny druhy vestavěných výjimek, můžete si také vytvořit svůj vlastní, pokud si budete přát. Mezi nejběžnější výjimky Java patří:

  • NullPointerException
  • NumberFormatException
  • IllegalArgumentException
  • RuntimeException
  • IllegalStateException

Co se stane, když hodíte výjimku?

Nejprve se Java podívá do okamžité metody, aby zjistila, zda existuje kód, který zpracovává druh výjimky, kterou vyhodil. Pokud popisovač neexistuje, podívá se na metodu, která volala aktuální metodu, aby zjistila, zda tam existuje popisovač. Pokud ne, zkoumá metodu, která volala že metodu a poté další metodu atd. Pokud výjimka není zachycena, aplikace vytiskne trasování zásobníku a poté dojde k chybě. (Ve skutečnosti je to mnohem jemnější než prosté zhroucení, ale to je pokročilé téma nad rámec tohoto článku.)

A trasování zásobníku je seznam všech metod, kterými procházela Java při hledání obsluhy výjimek. Jak vypadá trasování zásobníku:

Výjimka v podprocesu „main“ java.lang.NullPointerException na com.example.myproject.Book.getTitle (Book.java:16) na com.example.myproject.Author.getBookTitles (Author.java:25) na com.example. myproject.Bootstrap.main (Bootstrap.java:14)

Z toho můžeme hodně získat. Nejprve byla vyvolána výjimka NullPointerException. Stalo se to v EU getTitle () metoda na řádku 16 na adrese Book.java. Tato metoda byla volána od getBookTitles () na řádku 25 souboru Author.java. Že metoda byla volána z hlavní() na řádku 14 souboru Bootstrap.java. Jak vidíte, poznání všeho usnadňuje ladění.

Opět platí, že skutečnou výhodou výjimek je to, že můžete “Rukojeť” neobvyklý stav zachycením výjimky, správným nastavením věcí a obnovením aplikace bez selhání.

Použití výjimek Java v kódu

Řekněme, že ano someMethod () který zabere celé číslo a provede nějakou logiku, která by se mohla zlomit, pokud je celé číslo menší než 0 nebo větší než 100. To by mohlo být dobré místo pro vyvolání výjimky:

public void someMethod (int value) if (value 100) throw new IllegalArgumentException();  //…

Chcete-li tuto výjimku chytit, musíte jít kam someMethod () se nazývá a používá try-catch blok:

public void callingMethod () try someMethod (200); someOtherMethod ();  catch (IllegalArgumentException e) // zde zpracovat výjimku //…

Všechno uvnitř Snaž se blok bude spuštěn v pořadí, dokud nebude vyvolána výjimka. Jakmile je vyvolána výjimka, jsou všechny následující příkazy přeskočeny a aplikační logika okamžitě skočí na úlovek blok.

V našem příkladu zadáme blok try a okamžitě zavoláme someMethod (). Protože 200 není mezi 0 a 100, je IllegalArgumentException je hozen. Tím se okamžitě ukončí provádění someMethod (), přeskočí zbytek logiky v bloku try (someOtherMethod () se nikdy nezavolá) a pokračuje v provádění v rámci blokovacího bloku.

Co by se stalo, kdybychom zavolali someMethod (50) místo toho? IllegalArgumentException nikdy by nebyl hoden. someMethod () bude fungovat normálně. Blok try by se spustil jako normální, volání someOtherMethod () po dokončení someMethod (). Když someOtherMethod () končí, bude blokování přeskočeno a callingMethod () bude pokračovat.

Uvědomte si, že můžete mít více bloků odlovu na blok vyzkoušení:

public void callingMethod () try someMethod (200); someOtherMethod ();  catch (IllegalArgumentException e) // zde zpracovat výjimku catch (NullPointerException e) // zde zpracovat výjimku //…

Také si všimněte, že volitelné Konečně blok také existuje:

public void method () try //… catch (Výjimka e) //… konečně //…

Kód v konečném bloku je vždy popraven bez ohledu na to, co. Pokud máte příkaz return v bloku try, je konečný blok proveden před návratem z metody. Pokud v bloku chytíte další výjimku, poslední blok se provede před vyvoláním výjimky.

Konečný blok byste měli použít, pokud máte objekty, které je třeba před ukončením metody vyčistit. Pokud například otevřete soubor v bloku try a později vyvoláte výjimku, konečný blok vám umožní zavřít soubor před opuštěním metody.

Všimněte si, že můžete mít konečný blok bez blokovacího bloku:

public void method () try //… konečně //…

To vám umožní provést potřebné vyčištění a zároveň povolit vyvolané výjimky pro šíření zásobníku vyvolání metod (tj. Nechcete zde zpracovat výjimku, ale stále je třeba vyčistit nejprve).

Vyloučené výjimky v Javě

Na rozdíl od většiny jazyků, Java rozlišuje mezi kontrolované výjimky a nekontrolované výjimky (např. C # má pouze nezaškrtnuté výjimky). Kontrolovaná výjimka musí být chycen v metodě, kde je vyvolána výjimka, jinak se kód nebude kompilovat.

Chcete-li vytvořit zaškrtnutou výjimku, vyberte z Výjimka. Chcete-li vytvořit nezaškrtnutou výjimku, vyberte z RuntimeException.

Jakákoli metoda, která vyvolá zaškrtnutou výjimku, ji musí označit v podpisu metody pomocí hází klíčové slovo. Od vestavěné Java IOException je zaškrtnutá výjimka, následující kód se nezkompiluje:

public void wontCompile () //… if (someCondition) throw new IOException ();  //…

Nejprve musíte prohlásit, že vyvolá zaškrtnutou výjimku:

public void willCompile () vyvolá IOException //… if (someCondition) throw new IOException ();  //…

Všimněte si, že metoda může být deklarována jako vyvolání výjimky, ale nikdy ve skutečnosti nevrhne výjimku. Výjimku bude přesto třeba zachytit, jinak se kód nebude kompilovat.

Kdy byste měli použít zaškrtnuté nebo nezaškrtnuté výjimky?

Oficiální Java dokumentace obsahuje stránku s touto otázkou. To shrnuje rozdíl stručným pravidlem: “Pokud lze důvodně očekávat, že se klient zotaví z výjimky, udělejte z něj zaškrtnutou výjimku. Pokud klient nemůže udělat nic pro zotavení z výjimky, udělejte z něj nekontrolovanou výjimku.”

Tento pokyn však může být zastaralý. Na jedné straně vedou kontrolované výjimky k robustnějšímu kódu 10 tipů pro psaní čistšího a lepšího kódu 10 tipů pro psaní čistšího a lepšího kódu Zápis čistého kódu vypadá snadněji, než ve skutečnosti je, ale jeho přínosy stojí za to. Takto můžete začít psát čistší kód ještě dnes. . Na druhou stranu žádný jiný jazyk neověřoval výjimky stejným způsobem jako Java, což ukazuje dvě věci: jedna, tato vlastnost není dost užitečná pro to, aby ji ostatní jazyky ukradly, a dvě, můžete bez nich absolutně žít. Navíc, zkontrolované výjimky nehrají pěkně s lambda výrazy představenými v Java 8.

Pokyny pro používání výjimek Java

Výjimky jsou užitečné, ale snadno zneužitelné a zneužitelné. Zde je několik tipů a doporučených postupů, které vám pomohou vyhnout se jejich nepořádkům.

  • Preferujte specifické výjimky před obecnými výjimkami. Použití NumberFormatException přes IllegalArgumentException pokud je to možné, použijte jiné IllegalArgumentException přes RuntimeException Pokud to bude možné.
  • Nikdy chytit Házet! Výjimka třída skutečně rozšiřuje Házet, a blok blokování ve skutečnosti pracuje Házet nebo jakákoli třída, která rozšiřuje Throwable. Nicméně, Chyba třída také rozšiřuje Házet, a nikdy nechceš chytit Chyba protože ChybaOznačují vážné neodstranitelné problémy.
  • Nikdy chytit Výjimka! Přerušená výjimka rozšiřuje Výjimka, takže každý blok, který chytí Výjimka také chytí Přerušená výjimka, a to je velmi důležitá výjimka, se kterou nechcete chatovat (zejména v aplikacích s více vlákny), pokud nevíte, co děláte. Pokud nevíte, kterou výjimku chytit, zvažte, že nic nechytíte.
  • K usnadnění ladění použijte popisné zprávy. Když hodíte výjimku, můžete poskytnout Řetězec jako argument. Tato zpráva je přístupná v blokovacím bloku pomocí Exception.getMessage () metoda, ale pokud výjimka není nikdy zachycena, zpráva se také objeví jako součást trasování zásobníku.
  • Snažte se chytit a ignorovat výjimky. Abychom se vyhnuli nepříjemnostem kontrolovaných výjimek, mnoho nováčků a líných programátorů nastaví blok blokování, ale ponechá jej prázdný. Špatný! Vždy s ním zacházejte elegantně, ale pokud nemůžete, vytiskněte alespoň stopu zásobníku, takže víte, že byla vyvolána výjimka. Můžete to udělat pomocí Exception.printStackTrace () metoda.
  • Dejte si pozor na nadměrné používání výjimek. Když máte kladivo, všechno vypadá jako hřebík. Když se poprvé dozvíte o výjimkách, můžete se cítit povinni proměnit vše v výjimku… do bodu, kdy většina řízení vaší aplikace přijde na zpracování výjimek. Pamatujte, že výjimky jsou určeny “výjimečný” výskytů!

Nyní byste měli být dostatečně spokojeni s výjimkami, abyste pochopili, co jsou, proč jsou používány a jak je začlenit do svého vlastního kódu. Pokud tomuto konceptu plně nerozumíte, je to v pořádku! Chvíli mi to trvalo “klikněte” v mé hlavě, takže si nemyslete, že byste to museli spěchat. Pokud si nejste zcela jisti, že jste chtěli být programátorem, zde jsou některé náznaky, které vás mohou nasměrovat správným směrem. . Nepospíchej.

Máte nějaké dotazy? Znáte nějaké další tipy týkající se výjimek, které mi chyběly? Sdílejte je v komentářích níže!




Bisher hat noch niemand einen Kommentar zu diesem Artikel abgegeben.

O moderní technologii, jednoduché a cenově dostupné.
Váš průvodce ve světě moderních technologií. Naučte se, jak používat technologie a pomůcky, které nás každý den obklopují, a naučte se, jak objevovat na internetu zajímavé věci.