Undtagelser er et fundamentalt koncept i Java-programmering, der hjælper dig med at håndtere uventede situationer i din kode. Mens du allerede har lært, hvordan man håndterer undtagelser, er det nu tid til at tage et skridt videre: at kaste og definere egne undtagelser. I denne vejledning vil jeg vise dig, hvordan du selv kan generere undtagelser i din kode og oprette personaliserede undtagelsesklasser, der hjælper dig med at gøre din kode klarere og mere robust.
Vigtigste indsigter
- Du kan kaste egne undtagelser i Java for bedre at håndtere specifikke fejlsituationer.
- At definere egne undtagelsesklasser gør det muligt for dig at gøre din fejlhåndtering mere naturlig og forståelig.
- Du vil lære, hvordan man både kaster undtagelser i metoder og arbejder med Try-Catch-blokke.
Trin-for-trin vejledning
1. Opfriskning af håndtering af undtagelser
I starten er det vigtigt at huske, hvordan håndteringen af undtagelser i Java ser ud. Du kan f.eks. huske try-catch-konstrukterne, der gør det muligt for dig at fange fejl og reagere på dem. I det tidligere forløb har du set, hvordan en NumberFormatException håndteres, når der foretages en ugyldig konvertering fra en streng til et tal.
2. Undtagelser i din egen kode
Nu vil vi se på, hvordan du kan kaste undtagelser i din egen kode. Dette kan være særligt nyttigt, hvis du ønsker at definere specifikke fejlsituationer i dine programmer, som ikke behandles som standard i Java.

3. Oprettelse af en klasse til validering
Lad os overveje en eksempelklasse, som vi kalder MyValidator. Denne klasse får en metode, der forventer et kodeafsnit til validering, i vores tilfælde en PIN-kode. Hvis den indtastede PIN-kode ikke svarer til en bestemt værdi, kastes en undtagelse.
4. Generere og fange fejl
Inden for validateCode-metoden kan du oprette en if-sætning. Hvis koden ikke svarer til den forventede værdi, kaster du en ny undtagelse, der ser således ud: throw new Exception("Kun 42 er svaret på alle spørgsmål."). Her bruger du nøgleordet throw til at generere undtagelsen.
5. Justere metodens signatur
For at signalere, at denne metode kan kaste en undtagelse, skal du inkludere throws-nøgleordet i metodens signatur. Følgelig hedder metoden nu: public void validateCode(int code) throws Exception. På denne måde bliver kaste af undtagelsen tydeligt kommunikeret, og alle kaldere af metoden er forpligtet til at håndtere det.
6. Håndtering af undtagelse i try-catch-blok
For at fange undtagelsen kan du placere metoden i en try-catch-blok. Når en undtagelse opstår, udføres koden i catch-blokken, hvor du udfører den specifikke fejlstyring, f.eks. ved at udskrive en fejlsmeddelelse.
7. Valgfrit at kaste undtagelser igen
Du kan også overveje at kaste en fanget undtagelse igen for at videresende den til et højere logiklag. Du bør dog være opmærksom på, at dette kun giver mening, hvis du ikke befinder dig i hovedmetoden, da der normalt ikke følger mere kode efter catch-blokken her.
8. Fordelene ved egne undtagelser
Den største fordel ved egne undtagelsesklasser er, at de er intuitivt navngivet og specifikke for brugssagen. I stedet for at arbejde med generiske undtagelser kan du definere specifikke klasser som NotFoundException eller InvalidInputException. Disse hjælper dig ikke kun med at identificere fejl, men også med fejlsøgning og vedligeholdelse af din kode.

Resumé – Kaste og definere undtagelser i Java
Ved at kaste og definere egne undtagelser får du et kraftfuldt værktøj til effektivt at håndtere fejl og gøre din kode mere læsbar. Du kan formulere specifikke undtagelsesbetingelser og forbedre den logiske adskillelse af fejl, hvilket øger vedligeholdelsen af dit program.
Ofte stillede spørgsmål
Hvad er forskellen mellem checked og unchecked undtagelser?Checked undtagelser skal behandles i metodens signatur, mens unchecked undtagelser ikke skal.
Hvorfor skal jeg oprette egne undtagelser?Egne undtagelser hjælper med specifikke fejlsmeddelelser, der sigter mod at identificere problemer bedre og gøre koden mere læsbar.
Hvordan kaster jeg en undtagelse i en metode?Du bruger nøgleordet throw efterfulgt af en ny instans af undtagelsen.
Skal jeg angive i metodens deklaration, at jeg kaster en undtagelse?Ja, til dette bruger du throws-nøgleordet i metodens signatur.
Hvad sker der, hvis jeg ikke håndterer en undtagelse?Programmet afsluttes normalt med en runtime-undtagelse, medmindre undtagelsen er ugyldig og ikke håndteres.