Sjekket unntak vs kjøretidsunntak
Unntak er spesielle typer hendelser som kan forstyrre den normale programflyten. Navneunntaket kommer fra "eksepsjonell begivenhet". Å kaste et unntak er prosessen med å lage et unntaksobjekt og overlevere det til kjøretidssystemet. Når kjøretidssystemet mottar unntaksobjektet, vil det prøve å finne noen til å håndtere det innenfor anropsstakken ved å krysse det i omvendt rekkefølge (der metodene ble k alt). Runtime-systemet er vellykket hvis det finner en metode med en unntaksbehandler. Unntaksbehandler er en kodeblokk som offisielt kan håndtere nevnte unntak. Hvis kjøretidssystemet finner en passende behandler, vil det sende unntaksobjektet til behandleren. Dette kalles å fange unntaket. Men hvis unntaket ikke kan håndteres, vil programmet avsluttes. I Java arver unntak fra Throwable-klassen. Avmerkede unntak er unntak der håndtering håndheves av kompilatoren. Kjøretidsunntak er en type unntak som ikke kontrolleres av kompilatoren.
Hva er et sjekket unntak?
Checked Unntak er enten objekter av klassen java.lang.exception eller dens underklasser (unntatt java.lang. RuntimeException og dens underklasser). Avmerkede unntak "sjekkes" på kompileringstidspunktet. Det betyr at programmereren enten må fange opp eller kaste disse unntakene, ellers ville kompileringen klage (og forårsake en kompilatorfeil). På grunn av denne grunn er mange sjekkede unntak svært godt kjent for programmerere. For eksempel er IOException og dens underklasser kontrollerte unntak, og hver gang programmereren arbeider med å få tilgang til eller modifisere en fil, kontrollerer kompilatoren for å sikre at alle mulige IOExceptions blir tatt hånd om av programmereren.
Hva er et kjøretidsunntak?
Runtime Exceptions består av java.lang. RuntimeException og alle dets underklasser. Teoretisk sett tjener de samme formål som sjekkede unntak, og kan kastes eller håndteres som sjekket unntak, men håndteringen av dem håndheves ikke av kompilatoren. Derfor tilhører Runtime-unntak familien av ukontrollerte unntak. NullPointerException, NumberFormatEception, ClassCastException og ArrayIndexOutOfBoundsException er vanlige kjøretidsunntak i Java.
Hva er forskjellen mellom Checked Exception og Runtime Exception?
Selv om både sjekkede unntak og kjøretidsunntak er uønskede forekomster under kjøringen av et program, har de sine forskjeller. Kontrollert unntakshåndtering håndheves av kompilatoren, men kjøretidsunntak er det ikke. Derfor må sjekkede unntak kastes eller håndteres for at koden skal kompileres, men det er ikke noe slikt krav angående kjøretidsunntak. Følgelig tilhører kjøretidsunntak til uavmerket unntakskategori sammen med feil.
Ulempen med sjekkede unntak er at programmereren må håndtere det selv om hun ikke vet hvordan. Så hvis programmereren bare kaster et nytt unntak uten å pakke inn originalen, vil stabelsporet som tilhører det opprinnelige unntaket gå tapt. Det er her kjøretidsunntak kommer godt med. Fordi alle kjøretidsunntak kan håndteres på ett enkelt sted, kan programmerere skrive mindre mengde kode. På den annen side, siden sjekkede unntak må fanges opp, er det ingen overraskelse for programmereren. Hun vil alltid vite hvilket sjekket unntak som kan bli kastet av en bestemt metode. I motsetning til dette kan forskjellige kjøretidsunntak gjøres uten programmererens viten.