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.