Forskjellen mellom kontrollert unntak og runtime unntak

Kontrollert Unntak vs Runtime Unntak

Unntak er spesiell type hendelser, noe som kan forstyrre normal programflyt. Navnet unntak kommer fra "eksepsjonell begivenhet". Å kaste et unntak er prosessen med å lage et unntaksobjekt og overlate det til kjøretidssystemet. Når runtime-systemet mottar unntaksobjektet, vil det prøve å finne noen til å håndtere det i anropsstakken ved å krysse det i omvendt rekkefølge (der metodene ble kalt). Rundtidssystemet er vellykket hvis det finner en metode med en unntakshåndterer. Unntakshandler er en blokk med kode som offisielt kan håndtere nevnte unntak. Hvis runtime-systemet finner en passende håndterer, vil den passere unntaksobjektet til håndtereren. Dette kalles å fange unntaket. Men hvis unntaket ikke kan håndteres, avslutter programmet. I Java arver unntak fra Throwable class. Kontrollerte unntak er unntak som håndteringen håndheves av kompilatoren. Runtime unntak er en type unntak, som ikke er sjekket av kompilatoren.

Hva er en sjekket unntak?

Kontrollerte unntak er enten objekter av klassen java.lang.exception eller dens underklasser (unntatt java.lang.RuntimeException og dens underklasser). Kontrollerte unntak er "sjekket" på kompileringstidspunktet. Det betyr at programmøren må enten fange eller kaste disse unntakene, ellers kompilere ville klage (forårsaker en kompilatorfeil). På grunn av dette er mange sjekket unntak meget godt kjent for programmerere. For eksempel er IOException og dens underklasser sjekket unntak, og når programmereren handler om tilgang eller modifisering av en fil, kontrollerer kompilatoren for å sikre at alle mulige IOExceptions blir tatt vare på av programmereren.

Hva er en Runtime Exception?

Runtime Unntak består av java.lang.RuntimeException og alle sine underklasser. Teoretisk sett tjener de samme formål som kontrollerte unntak, og kan kastes eller håndteres som kontrollert unntak, men håndteringen av dem håndheves ikke av kompilatoren. Derfor, Runtime unntak tilhører familien av ukontrollerte unntak. NullPointerException, NumberFormatEception, ClassCastException og ArrayIndexOutOfBoundsException er vanlige runtime unntak i Java.

Hva er forskjellen mellom Checked Exception og Runtime Exception?

Selv om både kontrollerte unntak og runtime unntak er uønsket forekomst under utførelsen av et program, har de forskjeller. Kontrollert unntakshåndtering håndheves av kompilatoren, men kjøretid unntak er ikke. Derfor må kontrollerte unntak kastes eller håndteres for at koden skal kompilere, men det er ikke noe krav om kjøretid unntak. Følgelig tilhører kjøretid unntak til ukontrollerte unntak kategori sammen med feil.

Ulempen med sjekket unntak er at programmereren har å håndtere det selv om hun ikke vet hvordan. Så, hvis programmereren bare kaster et nytt unntak uten å pakke opp originalen, vil stakksporet som tilhører det opprinnelige unntaket gå tapt. Dette er hvor kjøretid unntak kommer til nytte. Fordi alle runtime unntak kan håndteres på et enkelt sted, kan programmører derfor skrive mindre mengde kode. På den annen side, siden sjekket unntak må bli tatt, er det ingen overraskelse for programmereren. Hun vil alltid vite hvilket kontrollert unntak som kan kastes av en bestemt metode. I motsetning til dette kan ulike kjøretid unntak kastes uten programmererens kjennskap.