Java globális kivételkezelő

1. Áttekintés

Ebben az oktatóanyagban a Java kivételével a globális kivételkezelőre koncentrálunk. Először megvitatjuk a kivételek és a kivételkezelés alapjait. Ezután átfogó pillantást vetünk a globális kivételkezelőre.

Ha többet szeretne megtudni a kivételekről általában, olvassa el a Java-ban található kivételkezelést.

2. Mi az a kivétel?

Kivételt képez egy rendellenes állapot, amely futás közben vagy fordítási időben fordul elő egy kódsorban. Ez a rendellenes állapot akkor merül fel, amikor egy program megsérti a Java programozási nyelv szemantikai kényszerét.

A fordítási idő alatt előforduló kivételek: ellenőrzött kivételek. Ezek a kivételek az AL közvetlen alosztályai Kivétel osztály, és ezeket a kivételeket a kódban kell kezelni.

A kivételek egy másik típusa a ellenőrizetlen kivételek. A fordító a fordítás ideje alatt nem ellenőrzi ezeket a kivételeket. Ezek a kivételek az AL közvetlen alosztályai RuntimeException osztály, amely kiterjeszti a Kivétel osztály.

Ezenkívül nem szükséges a futásidejű kivételeket kezelni a kódban.

3. Kivételkezelők

A Java egy robusztus programozási nyelv. Az egyik alapvető tulajdonság, amely robusztusvá teszi a kivételkezelő keretrendszer. Ez azt jelenti, hogy a program kecsesen kiléphet a hiba idején, ahelyett, hogy csak összeomlik.

Valahányszor kivétel történik, egy Exception objektum felépül, vagy a JVM, vagy a kódot végrehajtó módszer segítségével. Ez az objektum tartalmazza a kivételre vonatkozó információkat. A kivétel kezelése ennek a módja Kivétel tárgy.

3.1. A próbáld elkapni Blokk

A következő példában a próbáld ki blokk tartalmazza a kódot, amely kivételt vethet. A fogás blokk tartalmazza a kivétel kezelésének logikáját.

A fogás blokk elkapja a Kivétel objektum, hogy a kód a próbáld ki blokk emelések:

Karaktersorozat = "01, 2010"; DateFormat format = new SimpleDateFormat ("HH, NN, Éééé"); Dátum dátuma; próbáld ki a {date = format.parse (string) parancsot; } catch (ParseException e) {System.out.println ("ParseException elfogva!"); }

3.2. A dobás és dob Kulcsszavak

Alternatív megoldásként a módszer dönthet úgy is, hogy a kivételt eldobja ahelyett, hogy kezelné. Ez azt jelenti, hogy milyen logika van a Kivétel az objektum máshova van írva.

Ilyen esetekben általában a hívási módszer kezeli a kivételt:

public class ExceptionHandler {public static void main (String [] args) {String strDate = "01, 2010"; String dateFormat = "HH, nn, éééé"; próbáld ki a {Date date = new DateParser (). getParsedDate (strDate, dateFormat); } catch (ParseException e) {System.out.println ("A hívási módszer elkapta a ParseException-t!"); }}} class DateParser {public Date getParsedDate (String strDate, String dateFormat) dobja a ParseException {DateFormat format = new SimpleDateFormat (dateFormat); próbáld ki a {return format.parse (strDate); } catch (ParseException parseException) {dob parseException; }}}

Ezután a globális kivételkezelőt tekintjük a kivételek kezelésének általános módjára.

4. Globális kivételkezelő

A RuntimeException opcionálisan kezelhetők. Következésképpen még mindig nyitva hagy egy ablakot a hosszú verem nyomainak futás közbeni megszerzésére. Ennek kezelésére, A Java biztosítja a UncaughtExceptionHandler felület. A cérna osztály ezt belső osztályként tartalmazza.

Ezen a felületen kívül A Java 1.5 kiadás szintén statikus módszert vezetett be setDefaultUncaughtExceptionHandler () ban,-ben cérna osztály. Ennek a metódusnak az az érve, hogy a kezelő osztály végrehajtja a UncaughtExceptionHandler felület.

Továbbá ez az interfész deklarálja a módszert uncaughtException (Thread t, Throwable e). Akkor lesz meghívva, amikor egy adott szál t az adott el nem fogott kivétel miatt megszűnik e. A megvalósító osztály ezt a módszert valósítja meg, és meghatározza ezen el nem fogott kivételek kezelésének logikáját.

Vizsgáljuk meg a következő példát, amely egy Számtani kivétel futás közben. Meghatározzuk az osztályt Handler amely megvalósítja az interfészt UncaughtExceptionHandler.

Ez az osztály valósítja meg a módszert uncaughtException () és meghatározza a benne el nem fogott kivételek kezelésének logikáját:

public class GlobalExceptionHandler {public static void main (String [] args) {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); új GlobalExceptionHandler (). performArithmeticOperation (10, 0); } public int performArithmeticOperation (int szám1, int szám2) {return szám1 / szám2; }} class Handler implementálja a Thread.UncaughtExceptionHandler {private static Logger LOGGER = LoggerFactory.getLogger (Handler.class); public void uncaughtException (Thread t, Throwable e) {LOGGER.info ("Kezeletlen kivétel elkapva!"); }}

Itt az éppen végrehajtott szál a fő szál. Így a példánya átkerül a módszerhez uncaughtException () a felvetett kivétellel együtt. Osztály Handler majd kezeli ezt a kivételt.

Ugyanez vonatkozik a kezeletlen ellenőrzött kivételekre is. Lássunk erre egy gyors példát is:

public static void main (String [] args) dobja a Kivételt {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); Útvonalfájl = Paths.get (""); Files.delete (fájl); }

Itt a Files.delete () módszer dob egy bejelöltet IOException, amelyet tovább dob a fő() módszer aláírása. A Handler fogja ezt a kivételt is.

Ily módon a UncaughtExceptionHandler segíti a kezeletlen kivételek futás közbeni kezelését. Azonban azt megszakítja a kivétel elkapásának és kezelésének gondolatát a származási pont közelében.

5. Következtetés

Ebben a cikkben időt szántunk arra, hogy megértsük, mik a kivételek, és mik azok kezelésének alapvető módjai. Azt is megállapítottuk, hogy a globális kivételkezelő a cérna osztály és kezeli az el nem fogott futásidejű kivételeket.

Ezután megláttunk egy mintaprogramot, amely futásidejű kivételt dob ​​és kezel egy globális kivételkezelővel.

A cikk példakódjai a GitHub oldalon találhatók.


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