Skillnaden mellan kontrollerat undantag och körtidsundantag

Skillnaden mellan kontrollerat undantag och körtidsundantag
Skillnaden mellan kontrollerat undantag och körtidsundantag

Video: Skillnaden mellan kontrollerat undantag och körtidsundantag

Video: Skillnaden mellan kontrollerat undantag och körtidsundantag
Video: Fysik 1 Relativitet - Hastighet och ljushastighet 2024, Juli
Anonim

Checked Exception vs Runtime Exception

Undantag är speciella typer av händelser som kan störa det normala programflödet. Namnundantaget kommer från "exceptionell händelse". Att kasta ett undantag är processen att skapa ett undantagsobjekt och lämna över det till runtime-systemet. När runtime-systemet tar emot undantagsobjektet kommer det att försöka hitta någon som kan hantera det inom anropsstacken genom att gå igenom det i omvänd ordning (i vilken metoderna anropades). Runtime-systemet är framgångsrikt om det hittar en metod med en undantagshanterare. Undantagshanterare är ett kodblock som officiellt kan hantera nämnda undantag. Om runtime-systemet hittar en lämplig hanterare kommer det att skicka undantagsobjektet till hanteraren. Detta kallas att fånga undantaget. Men om undantaget inte kan hanteras kommer programmet att avslutas. I Java ärver undantag från Throwable-klassen. Markerade undantag är undantag där hanteringen tvingas fram av kompilatorn. Runtime-undantag är en typ av undantag som inte kontrolleras av kompilatorn.

Vad är ett markerat undantag?

Checked Exceptions är antingen objekt av klassen java.lang.exception eller dess underklasser (förutom java.lang. RuntimeException och dess underklasser). Markerade undantag "kontrolleras" vid kompilering. Det betyder att programmeraren antingen måste fånga eller kasta dessa undantag, annars skulle kompileringen klaga (och orsaka ett kompilatorfel). På grund av denna anledning är många markerade undantag mycket välkända för programmerare. Till exempel är IOException och dess underklasser kontrollerade undantag, och närhelst programmeraren har att göra med att komma åt eller ändra en fil, kontrollerar kompilatorn för att säkerställa att alla möjliga IOExceptions tas om hand av programmeraren.

Vad är ett körtidsundantag?

Runtime Exceptions består av java.lang. RuntimeException och alla dess underklasser. Teoretiskt sett tjänar de samma syfte som kontrollerade undantag, och kan kastas eller hanteras som kontrollerade undantag, men hanteringen av dem upprätthålls inte av kompilatorn. Därför tillhör Runtime-undantag familjen av okontrollerade undantag. NullPointerException, NumberFormatEception, ClassCastException och ArrayIndexOutOfBoundsException är vanliga körtidsundantag i Java.

Vad är skillnaden mellan Checked Exception och Runtime Exception?

Även om både markerade undantag och körtidsundantag är oönskade förekomster under körningen av ett program, har de sina skillnader. Kontrollerad undantagshantering upprätthålls av kompilatorn, men körtidsundantag är det inte. Därför måste kontrollerade undantag kastas eller hanteras för att koden ska kompileras, men det finns inget sådant krav gällande runtime-undantag. Följaktligen tillhör runtime-undantag till den omarkerade undantagskategorin tillsammans med fel.

Nackdelen med markerade undantag är att programmeraren måste hantera det även om hon inte vet hur man ska göra. Så om programmeraren bara kastar ett nytt undantag utan att linda in originalet, kommer stackspåret som tillhör det ursprungliga undantaget att gå förlorat. Det är här runtime-undantag kommer väl till pass. Eftersom alla runtime-undantag kan hanteras på en enda plats, kan programmerare därför skriva mindre mängd kod. Å andra sidan, eftersom markerade undantag måste fångas, är det ingen överraskning för programmeraren. Hon kommer alltid att veta vilket kontrollerat undantag som kan kastas med en viss metod. I motsats till detta kan olika körtidsundantag kastas utan programmerarens vetskap.

Rekommenderad: