Kontrolleret undtagelse vs kørselstid
Undtagelser er specielle begivenheder, som kan forstyrre det normale programflow. Navnens undtagelse kommer fra "ekstraordinær begivenhed". At kaste en undtagelse er processen med at oprette et undtagelsesobjekt og aflevere det til runtime-systemet. Når runtime-systemet modtager undtagelsesobjektet, vil det forsøge at finde nogen, der kan håndtere det inden for opkaldsstakken ved at krydse det i omvendt rækkefølge (hvor metoderne blev kaldt). Runtime-systemet er vellykket, hvis det finder en metode med en undtagelsesbehandler. Undtagelsesbehandler er en blok kode, der officielt kan håndtere nævnte undtagelse. Hvis runtime-systemet finder en passende handler, videregiver det undtagelsesobjektet til handler. Dette kaldes at fange undtagelsen. Men hvis undtagelsen ikke kan håndteres, afsluttes programmet. I Java,undtagelser arver fra Throwable-klassen. Kontrollerede undtagelser er undtagelser, som håndteringen håndhæves af compileren. Runtime-undtagelser er en type undtagelser, som ikke kontrolleres af compileren.
Hvad er en kontrolleret undtagelse?
Kontrollerede undtagelser er enten objekter i klassen java.lang.exception eller dens underklasser (undtagen java.lang. RuntimeException og dens underklasser). Afkrydsede undtagelser "kontrolleres" på kompileringstidspunktet. Det betyder, at programmøren enten skal fange eller smide disse undtagelser, ellers vil kompilering klage (forårsager en compilerfejl). På grund af denne grund er mange kontrollerede undtagelser meget velkendte for programmører. For eksempel kontrolleres IOException og dens underklasser undtagelser, og hver gang programmøren har at gøre med adgang til eller ændring af en fil, kontrollerer compiler for at sikre, at alle mulige IOExceptions er taget hånd om af programmøren.
Hvad er en Runtime-undtagelse?
Runtime Undtagelser består af java.lang. RuntimeException og alle dens underklasser. Teoretisk set tjener de samme formål som afkrydsede undtagelser og kan smides eller håndteres som afkrydset undtagelse, men håndteringen af dem håndhæves ikke af kompilatoren. Derfor tilhører Runtime-undtagelser familien af ukontrollerede undtagelser. NullPointerException, NumberFormatEception, ClassCastException og ArrayIndexOutOfBoundsException er almindelige undtagelser for runtime i Java.
Hvad er forskellen mellem Kontrolleret undtagelse og Runtime-undtagelse?
Selvom både kontrollerede undtagelser og runtime-undtagelser er uønsket forekomst under udførelsen af et program, har de deres forskelle. Kontrolleret undtagelseshåndtering håndhæves af compileren, men runtime-undtagelser er ikke. Derfor skal kontrollerede undtagelser kastes eller håndteres for at koden kan kompileres, men der er ikke noget sådant krav til undtagelser fra runtime. Følgelig hører runtime-undtagelser til ukontrollerede undtagelseskategorier sammen med fejl.
Ulempen med afkrydsede undtagelser er, at programmøren skal håndtere det, selvom hun ikke ved, hvordan man gør det. Så hvis programmøren bare kaster en ny undtagelse uden at indpakke originalen, vil stacksporingen, der hører til den oprindelige undtagelse, gå tabt. Dette er hvor runtime-undtagelser er nyttige. Da alle runtime-undtagelser kan håndteres på et enkelt sted, kan programmører således skrive mindre mængde kode. På den anden side, da kontrollerede undtagelser skal fanges, er der ingen overraskelse for programmøren. Hun vil altid vide, hvilken afkrydset undtagelse der kan kastes efter en bestemt metode. I modsætning hertil kan forskellige runtime-undtagelser kastes uden programmørens kendskab.