Kontrollerad Exception vs Runtime Exception
Undantag är speciell typ av händelser, vilket kan störa det normala programflödet. Namnet undantaget kommer från "exceptionella händelse". Att kasta ett undantag är processen att skapa ett undantagsobjekt och överlämna det till runtime-systemet. När runtime-systemet tar emot undantagsobjektet, försöker det att hitta någon att hantera den i samtalstacken genom att korsa den i omvänd ordning (där metoderna kallades). Runtime-systemet är framgångsrikt om det hittar en metod med en undantagshanterare. Undantagshanteraren är ett block av kod som officiellt kan hantera nämnda undantag. Om runtime-systemet hittar en lämplig hanterare, kommer den att överföra undantagsobjektet till handlaren. Detta kallas fångar undantaget. Om undantaget inte kan hanteras, avslutas programmet. I Java ärar undantag från Throwable class. Kontrollerade undantag är undantag på vilka hantering verkställs av kompilatorn. Runtime-undantag är en typ av undantag, som inte kontrolleras av kompilatorn.
Vad är en kontrollerad undantag?
Kontrollerade undantag är antingen föremål för klassen java.lang.exception eller dess underklasser (utom java.lang.RuntimeException och dess underklasser). Kontrollerade undantag är "kontrollerade" vid sammanställningstiden. Det innebär att programmeraren antingen måste fånga eller kasta dessa undantag, annars skulle kompileringen klaga (orsakar ett kompilatorfel). På grund av denna anledning är många kontrollerade undantag mycket välkända för programmerare. IOException och dess underklasser är till exempel markerade undantag, och när programmeraren hanterar åtkomst eller ändring av en fil kontrollerar kompilatorn att se till att alla möjliga IOExceptions tas hand om av programmeraren.
Vad är en Runtime Exception?
Runtime-undantag 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 kontrollerat undantag, men hanteringen av dem verkställs inte av kompilatorn. Därför tillhör Runtime-undantag till familjen av obekanta undantag. NullPointerException, NumberFormatEception, ClassCastException och ArrayIndexOutOfBoundsException är vanliga runtime undantag i Java.
Vad är skillnaden mellan Checked Exception och Runtime Exception?
Även om både kontrollerade undantag och runtime-undantag är oönskade förekomsten under genomförandet av ett program har de sina skillnader. Kontrollerad undantagshantering verkställs av kompilatorn, men runtime-undantag är inte. Därför måste kontrollerade undantag kastas eller hanteras så att koden kan kompileras, men det finns inget sådant krav angående körtidsmässiga undantag. Följaktligen tillhör runtime undantag till okontrollerade undantag kategori tillsammans med fel.
Nackdelen med kontrollerade undantag är att programmeraren måste hantera det även om hon inte vet hur man ska. Så, om programmeraren bara kastar ett nytt undantag utan att förpacka originalet, kommer stackspåret som hör till det ursprungliga undantaget att gå vilse. Det är här runtime undantag kommer till nytta. Eftersom alla runtime undantag kan hanteras på en enda plats, så kan programmerare skriva mindre mängd kod. Å andra sidan, eftersom kontrollerade 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 runtime undantag kastas utan programmerarens kunskaper.