Undantag är ett grundläggande koncept inom Java programmering som hjälper dig att hantera oväntade situationer i din kod. Medan du redan har lärt dig hur man hanterar undantag, är det nu dags att ta ett steg längre: att kasta och definiera egna undantag. I den här guiden kommer jag att visa dig hur du själv kan generera undantag i din kod och skapa anpassade undantagsklasser som hjälper dig att göra din kod tydligare och mer robust.
Viktigaste insikter
- Du kan kasta egna undantag i Java för att bättre hantera specifika felaktiga situationer.
- Att definiera egna undantagsklasser möjliggör en mer naturlig och begriplig felhantering.
- Du kommer att lära dig hur man kastar undantag både i metoder och hur man arbetar med try-catch-block.
Steg-för-steg-guide
1. Återuppfriskning av hantering av undantag
I början är det viktigt att komma ihåg hur hanteringen av undantag i Java ser ut. Du kan till exempel tänka på try-catch-konstruktioner som gör det möjligt för dig att fånga fel och reagera på dem. Under den tidigare genomgången har du sett hur man hanterar en NumberFormatException när en ogiltig omvandling från en sträng till ett nummer görs.
2. Undantag i din egen kod
Nu ska vi titta på hur du kan kasta undantag i din egen kod. Detta kan vara särskilt användbart om du vill definiera specifika felvillkor i dina program som inte hanteras som standard i Java.

3. Skapa en klass för validering
Låt oss betrakta en exempelklass som vi kallar MinValidator. Denna klass har en metod som förväntar sig ett kodsegment som ska valideras, i vårt fall en PIN-kod. Om den angivna PIN-koden inte motsvarar ett visst värde kastas ett undantag.
4. Generera och fånga fel
Inuti validateCode-metoden kan du skapa en if-sats. Om koden inte motsvarar det förväntade värdet kastar du ett nytt undantag som ser ut så här: throw new Exception("Bara 42 är svaret på alla frågor.");. Här använder du nyckelordet throw för att generera undantaget.
5. Anpassa metodsignaturen
För att signalera att denna metod kan kasta ett undantag måste du inkludera nyckelordet throws i metodens signatur. Följaktligen heter metoden nu: public void validateCode(int code) throws Exception. På så sätt kommuniceras kastandet av undantaget tydligt och alla som anropar metoden är skyldiga att hantera det.
6. Hantera undantag i ett Try-Catch-block
För att fånga undantaget kan du lägga metoden i ett try-catch-block. Om ett undantag inträffar kommer koden i catch-blocket att köras, där du utför den specifika felhanteringen, till exempel genom att mata ut ett felmeddelande.
7. Valfritt vidarebefordra undantag
Du kan också överväga att kasta ett fångat undantag igen för att vidarebefordra det till en högre logiknivå. Du bör dock notera att detta endast är meningsfullt om du inte befinner dig i huvudmetoden, eftersom normalt inget ytterligare kod följer efter catch-blocket här.
8. Fördelarna med egna undantag
Den största fördelen med egna undantagsklasser är att de är intuitivt namngivna och specifika för användningsfallet. Istället för att arbeta med generiska undantag kan du definiera specifika klasser som NotFoundException eller InvalidInputException. Dessa hjälper dig inte bara att identifiera fel utan också med felsökning och underhåll av din kod.

Sammanfattning – Kasta och definiera undantag i Java
Genom att kasta och definiera egna undantag får du ett kraftfullt verktyg för att effektivt hantera fel och göra din kod mer läsbar. Du kan formulera specifika undantagsvillkor och förbättra den logiska åtskillnaden mellan fel, vilket ökar underhållbarheten av ditt program.
Vanliga frågor
Vad är skillnaden mellan checked och unchecked undantag?Checked undantag måste hanteras i metodens signatur, medan unchecked undantag inte behöver det.
Varför bör jag skapa egna undantag?Eget undantag hjälper med specifika felmeddelanden som syftar till att bättre identifiera problem och göra koden mer läsbar.
Hur kastar jag ett undantag i en metod?Du använder nyckelordet throw, följt av en ny instans av undantaget.
Måste jag ange i metoddeklarationen att jag kastar ett undantag?Ja, det gör du genom att använda throws-nyckelordet i metodens signatur.
Vad händer om jag inte hanterar ett undantag?Programmet avslutas normalt med en körexceptionsfel, såvida inte undantaget är ogiltigt och inte hanteras.