Forskjellen mellom kontrollert unntak og runtime unntak
Kontrollert Unntak mot Runtime Unntak
Unntak er spesiell type hendelser, som kan forstyrre den normale programflyten. 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 kontrollert unntak?
Kontrollerte unntak er enten objekter av klassen java. Lang. unntak eller dets underklasser (unntatt java. lang. RuntimeException og dets 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 programmøren håndterer eller modifiserer en fil, kontrollerer kompilatoren for å sikre at alle mulige IOExceptions blir tatt vare på av programmereren.
Hva er en Runtime-unntak?
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 sjekket unntak og runtime unntak?
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 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 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.