Undtagelse vs fejl
Uventet opførsel er forpligtet til at forekomme, når et program kører. Dette kan skyldes undtagelser eller fejl. Undtagelser er begivenheder, der kan forstyrre den normale programstrøm. Fejl er forhold, der kan betragtes som uoprettelige. Undtagelser er mest relateret til selve applikationen, mens fejl er relateret til det system, som programmet kører på.
Hvad er en undtagelse?
Undtagelse er en begivenhed, der kan forstyrre den normale programstrøm. Navneundtagelsen kommer fra "usædvanlig begivenhed". At kaste en undtagelse er processen med at oprette et undtagelsesobjekt og aflevere det til runtime-systemet. Undtagelsesobjekt oprettes ved hjælp af metoden, hvor undtagelsen fandt sted. Undtagelsesobjekt indeholder nyttige oplysninger såsom typen og beskrivelsen af undtagelsen. Når runtime-systemet modtager undtagelsesobjektet, vil det forsøge at finde nogen til at håndtere det inden for opkaldsstakken ved at krydse det i omvendt rækkefølge (hvor metoderne blev kaldt). Opkaldsstabel er den bestilte liste over metoder, der blev kaldt forud for den metode, hvor undtagelsen fandt sted. Runtime-systemet er vellykket, hvis det finder en metode med en undtagelseshåndterer. Undtagelsesbehandler er en kode med blok, der officielt kan håndtere nævnte undtagelse. Hvis runtime-systemet finder en passende håndterer (dvs. type undtagelse matcher den type, der kan håndteres), vil det give undtagelsesobjektet til behandleren. Dette kaldes at fange undtagelsen. Hvis undtagelsen imidlertid ikke kan håndteres, afsluttes programmet. I Java arver undtagelser fra 'Throwable class.' NullPointerException og ArrayIndexOutOfBoundsException er to almindelige undtagelser i Java.
Hvad er en fejl?
En fejl er en betingelse, der kan betragtes som uoprettelig, f.eks. Det program, der kræver en hukommelse, der er større end hvad der er tilgængeligt. Disse fejl kan ikke håndteres under kørsel. Hvis der opstår en fejl, afsluttes programmet. I Java arver fejl fra Throwable-klassen. Fejl står normalt for alvorlige problemer, som programmereren (eller applikationen) ikke bør prøve at fange. Fejl er simpelthen unormale forhold, som aldrig forventes at forekomme under normale omstændigheder og derfor aldrig forudset. For eksempel er OutOfMemoryError, StackOverflowError og ThreadDead sådanne fejl. Metoder bør aldrig have håndterere for fejl.
Hvad er forskellen mellem undtagelse og fejl?
Både fejl og undtagelser forekommer uønsket under udførelsen af et program. De har imidlertid centrale forskelle. Undtagelser kan programmerne forudse, mens en fejl er vanskelig at forudse. Undtagelser kan kontrolleres eller afmarkeres. Men fejl er ikke afkrydset. Undtagelser indikerer typisk en fejl forårsaget af programmereren. Der opstår dog fejl på grund af en systemfejl eller en upassende brug af en ressource. Derfor skal undtagelser håndteres på applikationsniveau, mens fejl skal passe på systemniveau (kun hvis det er muligt). Efter håndtering af en undtagelse er du garanteret at vende tilbage til normal programstrøm. Men selv hvis der opstår en fejl, ved programmereren muligvis ikke, hvordan den skal håndteres i første omgang. I modsætning til traditionel fejlhåndtering tillader undtagelser at adskille fejlhåndteringskode fra almindelig kode.