Hvornår skal vi bruge throws nøgleord i Java?
- Det handler om, hvordan man kommer sig efter en undtagelse. Hvad skal f.eks.
java.lang.File
gøre, når filen ikke findes? Da den ikke ved, hvad der ville være bedst for den, der kalder, lader den den, der kalder, håndtere denne sag - Selvfølgelig kan du håndtere undtagelser i dit modul, hvis det er klart, hvordan nævnte undtagelser skal håndteres. Hvis håndteringen er afhængig af den opkaldte eller kontekst, lad den kaldende funktion bestemme
- Bør være klar nu
Lad mig bruge FileInputStream::new
smider FileNotFoundException
som et eksempel for at afklare din misforståelse.
Så for eksempel har vi en kode som denne:
FileInputStream fis = new FileInputStream("/some/path/to/file.txt");
Det kan give en FileNotFoundException
, og du siger det,
FileInputStream
ved åbenbart, at den kommer til at kaste en FileNotFoundException
, så hvorfor klarer den det ikke selv?
Fordi FileInputStream
ved ikke hvordan at håndtere undtagelsen!
Afhængigt af situationen er der mange måder at håndtere en FileNotFoundException
på :
- Hvis filstien kommer fra brugerinput, kan du bede brugeren om at indtaste en anden filsti
- Du viser muligvis en fejlmeddelelse
- Du gør måske ikke noget og lader det gå ned
Alt ovenstående kunne være helt fornuftige muligheder afhængigt af situationen. Hvordan er en FileInputStream
vil vide om din situation? Det er det ikke!
Det er derfor, det siger, med en throws
klausul:
Jeg smider disse undtagelser, klare det selv.