Java Global Exception Handler

1. Oversikt

I denne veiledningen vil vi fokusere på Global Exception Handler i Java. Vi vil først diskutere det grunnleggende om unntakene og håndteringen av unntak. Så får vi et omfattende blikk på den globale unntaksbehandleren.

For å lære mer om unntakene generelt, ta en titt på Unntakshåndtering i Java.

2. Hva er et unntak?

Et unntak er en unormal tilstand som oppstår i en kodesekvens ved kjøretid eller på kompileringstidspunktet. Denne unormale tilstanden oppstår når et program bryter med de semantiske begrensningene til Java-programmeringsspråket.

Unntak som oppstår i løpet av kompileringstiden er sjekket unntak. Disse unntakene er direkte underklasser av Unntak klasse, og det er nødvendig å håndtere disse unntakene i koden.

En annen type unntak er ukontrollerte unntak. Kompilatoren ser ikke etter disse unntakene i løpet av kompileringstiden. Disse unntakene er direkte underklasser av RuntimeException klasse som utvider Unntak klasse.

Det er heller ikke nødvendig å håndtere unntak for kjøretid i koden.

3. Unntakshåndterere

Java er et robust programmeringsspråk. En av kjernefunksjonene som gjør den robust, er rammeverket for unntakshåndtering. Det betyr at programmet kan gå elegant ut i tider med feil, i stedet for bare å krasje.

Når et unntak oppstår, kan et Exception objektet er konstruert, enten av JVM eller av metoden som kjører koden. Dette objektet inneholder informasjonen om unntaket. Unntakshåndtering er en måte å håndtere dette på Unntak gjenstand.

3.1. De prøvefangst Blokkere

I det følgende eksemplet, prøve inneholder koden som kan kaste et unntak. De å fange blokken inneholder logikken for å håndtere dette unntaket.

De å fange blokk fanger opp Unntak innvende at koden i prøve blokkerer:

Strengstreng = "01,, 2010"; DateFormat format = nytt SimpleDateFormat ("MM, dd, åååå"); Dato dato; prøv {date = format.parse (streng); } fange (ParseException e) {System.out.println ("ParseException fanget!"); }

3.2. De kaste og kaster Nøkkelord

Alternativt kan metoden også velge å kaste unntaket i stedet for å håndtere det. Det betyr logikken for å håndtere Unntak objekt er skrevet et annet sted.

Vanligvis håndterer anropsmetoden unntaket i slike tilfeller:

offentlig klasse ExceptionHandler {public static void main (String [] args) {String strDate = "01,, 2010"; String dateFormat = "MM, dd, åååå"; prøv {Date date = new DateParser (). getParsedDate (strDate, dateFormat); } fange (ParseException e) {System.out.println ("Anropsmetoden fanget ParseException!"); }}} klasse DateParser {public Date getParsedDate (String strDate, String dateFormat) kaster ParseException {DateFormat format = ny SimpleDateFormat (dateFormat); prøv {return format.parse (strDate); } fange (ParseException parseException) {kaste parseException; }}}

Deretter vil vi vurdere Global Exception Handler, som en generisk måte å håndtere unntak på.

4. Global Exception Handler

Forekomster av RuntimeException er valgfrie å håndtere. Derfor etterlater det fortsatt et vindu åpent for å få sporene med lang stabel ved kjøretid. For å håndtere dette, Java tilbyr UncaughtExceptionHandler grensesnitt. De Tråd klasse inneholder dette som en indre klasse.

I tillegg til dette grensesnittet, Java 1.5-utgivelse introduserte også en statisk metode setDefaultUncaughtExceptionHandler () i Tråd klasse. Argumentet for denne metoden er en håndtererklasse som implementerer UncaughtExceptionHandler grensesnitt.

Videre erklærer dette grensesnittet metoden uncaughtException (Thread t, Throwable e). Det vil bli påkalt når en gitt tråd t opphører på grunn av det gitte ufangede unntaket e. Implementeringsklassen implementerer denne metoden og definerer logikken for håndtering av disse ufangede unntakene.

La oss se på følgende eksempel som kaster et Aritmetisk unntak ved kjøretid. Vi definerer klassen Behandler som implementerer grensesnittet UncaughtExceptionHandler.

Denne klassen implementerer metoden uoppfanget unntak() og definerer logikk for å håndtere ufangede unntak i den:

public class GlobalExceptionHandler {public static void main (String [] args) {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); nye GlobalExceptionHandler (). performArithmeticOperation (10, 0); } public int performArithmeticOperation (int num1, int num2) {return num1 / num2; }} class Handler implementerer Thread.UncaughtExceptionHandler {private static Logger LOGGER = LoggerFactory.getLogger (Handler.class); offentlig tomrom ikke fangetException (Thread t, Throwable e) {LOGGER.info ("Unhandled exception undfanget!"); }}

Her er den nåværende utførende tråden hovedtråden. Dermed blir forekomsten overført til metoden uoppfanget unntak() sammen med det hevede unntaket. Klassen Behandler håndterer deretter dette unntaket.

Det samme gjelder ubehandlede avmerkede unntak. La oss også se et raskt eksempel på dette:

public static void main (String [] args) throw Exception {Handler globalExceptionHandler = new Handler (); Thread.setDefaultUncaughtExceptionHandler (globalExceptionHandler); Sti-fil = Paths.get (""); Files.delete (fil); }

Her, den Files.delete () metoden kaster en avkrysset IO unntak, som videre kastes av hoved() metodesignatur. De Behandler vil fange dette unntaket også.

På denne måten kan UncaughtExceptionHandler hjelper til med å håndtere unbehandlede unntak ved kjøretid. Imidlertid, det bryter ideen om å fange og håndtere unntaket nær opprinnelsesstedet.

5. Konklusjon

I denne artikkelen tok vi oss tid til å forstå hva unntakene er, og hva er de grunnleggende måtene å håndtere dem på. Vi identifiserte også at den globale unntaksbehandleren er en del av Tråd klasse og den håndterer ufangede unntak for kjøretid.

Så så vi et eksempelprogram som kaster et unntak for kjøretid og håndterer det ved hjelp av en global unntaksbehandler.

Eksempelkodene for denne artikkelen finner du på GitHub.


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