Obslužný program globálnych výnimiek Java

1. Prehľad

V tomto tutoriáli sa zameriame na obsluhu globálnych výnimiek v Jave. Najskôr si rozoberieme základy výnimiek a zaobchádzanie s nimi. Potom sa pozrieme komplexne na globálnu obsluhu výnimiek.

Ak sa chcete dozvedieť viac informácií o výnimkách všeobecne, pozrite si tému Spracovanie výnimiek v jazyku Java.

2. Čo je to výnimka?

Výnimkou je abnormálny stav, ktorý vzniká v sekvencii kódu za behu alebo v čase kompilácie. Tento abnormálny stav nastáva, keď program porušuje sémantické obmedzenia programovacieho jazyka Java.

Výnimky, ktoré sa vyskytnú počas kompilácie, sú skontrolované výnimky. Tieto výnimky sú priame podtriedy súboru Výnimka triedy a je potrebné tieto výnimky vybaviť v kóde.

Ďalším typom výnimiek sú nekontrolované výnimky. Kompilátor nekontroluje tieto výnimky počas kompilácie. Tieto výnimky sú priame podtriedy súboru RuntimeException trieda, ktorá rozširuje Výnimka trieda.

Tiež nie je potrebné spracovávať výnimky za behu v kóde.

3. Obslužné rutiny výnimiek

Java je robustný programovací jazyk. Jednou z hlavných funkcií, ktorá ho robí robustným, je rámec na spracovanie výnimiek. To znamená, že program môže ladne skončiť v čase chyby, a nie iba zlyhať.

Kedykoľvek dôjde k výnimke, an Exception objekt je zostrojenýbuď JVM, alebo metódou vykonávajúcou kód. Tento objekt obsahuje informácie o výnimke. Spracovanie výnimiek je spôsob riešenia tejto situácie Výnimka objekt.

3.1. The Skús chytiť Blokovať

V nasledujúcom príklade je skús blok obsahuje kód, ktorý môže vyvolať výnimku. The chytiť blok obsahuje logiku spracovania tejto výnimky.

The chytiť blok zachytáva Výnimka namietajú, že kód v skús blok zvyšuje:

Reťazcový reťazec = "01,, 2010"; Formát DateFormat = nový SimpleDateFormat ("MM, dd, rrrr"); Dátum a dátum; skus {date = format.parse (string); } catch (ParseException e) {System.out.println ("ParseException chytený!"); }

3.2. The hodiť a hodí Kľúčové slová

Alternatívne môže metóda zvoliť manipuláciu s výnimkou. To znamená logiku zvládnuť Výnimka objekt je napísaný niekde inde.

Metóda volania zvyčajne spracuje výnimku v týchto prípadoch:

verejná trieda ExceptionHandler {public static void main (String [] args) {String strDate = "01,, 2010"; Reťazec dateFormat = "MM, dd, rrrr"; try {Date date = new DateParser (). getParsedDate (strDate, dateFormat); } catch (ParseException e) {System.out.println ("Metóda volania zachytila ​​ParseException!"); }}} class DateParser {public Date getParsedDate (String strDate, String dateFormat) throws ParseException {DateFormat format = new SimpleDateFormat (dateFormat); try {return format.parse (strDate); } catch (ParseException parseException) {throw parseException; }}}

Ďalej zvážime obslužný program globálnych výnimiek ako všeobecný spôsob spracovania výnimiek.

4. Globálny spracovateľ výnimiek

Prípady RuntimeException sú voliteľné na manipuláciu. V dôsledku toho stále ponecháva otvorené okno na získanie stôp dlhého zásobníka za behu. Aby sme to zvládli, Java poskytuje UncaughtExceptionHandler rozhranie. The Závit trieda obsahuje toto ako vnútornú triedu.

Okrem tohto rozhrania Vydanie Java 1.5 taktiež predstavilo statickú metódu setDefaultUncaughtExceptionHandler () v Závit trieda. Argumentom tejto metódy je trieda obslužnej rutiny, ktorá implementuje UncaughtExceptionHandler rozhranie.

Toto rozhranie ďalej deklaruje metódu uncaughtException (Thread t, Throwable e). Bude vyvolané, keď dané vlákno t končí z dôvodu danej nezachytenej výnimky e. Implementujúca trieda implementuje túto metódu a definuje logiku spracovania týchto nezachytených výnimiek.

Uvažujme o nasledujúcom príklade, ktorý hodí Aritmetická výnimka za behu. Definujeme triedu Psovod ktorý implementuje rozhranie UncaughtExceptionHandler.

Táto trieda implementuje metódu uncaughtException () a definuje logiku na spracovanie nezachytených výnimiek:

public class GlobalExceptionHandler {public static void main (String [] args) {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); new GlobalExceptionHandler (). performArithmeticOperation (10, 0); } public int performArithmeticOperation (int num1, int num2) {return num1 / num2; }} obslužný program triedy implementuje Thread.UncaughtExceptionHandler {private static Logger LOGGER = LoggerFactory.getLogger (Handler.class); public void uncaughtException (Thread t, Throwable e) {LOGGER.info ("Bola zachytená neošetrená výnimka!"); }}

Tu je momentálne vykonávajúce vlákno hlavným vláknom. Jeho inštancia sa teda odovzdáva metóde uncaughtException () spolu so vznesenou výnimkou. Trieda Psovod potom spracuje túto výnimku.

To isté platí pre nespracované skontrolované výnimky. Pozrime sa tiež na krátky príklad:

public static void main (String [] args) hodí Exception {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); Súbor cesty = Paths.get (""); Files.delete (súbor); }

Tu je Files.delete () metóda hodí zaškrtnuté IOException, ktorý ďalej vrhá hlavný() podpis metódy. The Psovod zachytí aj túto výnimku.

Týmto spôsobom UncaughtExceptionHandler pomáha pri správe nespracovaných výnimiek za behu programu. Avšak, to prelomí myšlienku chytenia a manipulácie s výnimkou blízko miesta pôvodu.

5. Záver

V tomto článku sme si našli čas, aby sme pochopili, čo sú výnimky a aké sú základné spôsoby ich riešenia. Tiež sme zistili, že globálny obslužný program výnimiek je súčasťou Závit triedy a spracováva nezachytené runtime výnimky.

Potom sme videli ukážkový program, ktorý vyvolá runtime výnimku a spracuje ju pomocou globálneho obslužného programu výnimiek.

Vzorové kódy pre tento článok nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found