Skillnad mellan undantag och fel

Undantag mot fel

Oväntat beteende är skyldigt att inträffa när ett program körs. Detta kan bero på undantag eller fel. Undantag är händelser som kan störa det normala programflödet. Fel är villkor som kan betraktas som oåterkalleliga. Undantag är mest relaterade till själva applikationen, medan fel är relaterade till det system som programmet körs på.

Vad är en undantag?

Undantag är en händelse som kan störa det normala programflödet. Namnet undantaget kommer från "exceptionella händelse". Att kasta ett undantag är processen att skapa ett undantagsobjekt och överlämna det till runtime-systemet. Undantagsobjekt skapas med den metod som undantaget inträffade. Undantagsobjekt innehåller användbar information, såsom typen och beskrivningen av undantaget. När runtime-systemet tar emot undantagsobjektet, försöker det att hitta någon att hantera den i samtalstacken genom att korsa den i omvänd ordning (där metoderna kallades). Samtalsstapel är den ordnade listan över metoder som kallades före den metod som undantaget inträffade. Runtime-systemet är framgångsrikt om det hittar en metod med en undantagshanterare. Undantagshanteraren är ett block av kod som officiellt kan hantera nämnda undantag. Om runtime-systemet hittar en lämplig hanterare (dvs. typ av undantag matchar typen som kan hanteras), kommer den att överföra undantagsläget till hanteraren. Detta kallas fångar undantaget. Om undantaget inte kan hanteras, avslutas programmet. I Java ärövras undantag från "Throwable class." NullPointerException och ArrayIndexOutOfBoundsException är två vanliga undantag i Java.

Vad är ett fel?

Ett fel är ett villkor som kan betraktas som oåterkalleligt, till exempel programmet som kräver en mängd minne som är större än vad som är tillgängligt. Dessa fel kan inte hanteras vid körning. Om ett fel uppstår slutar programmet. I Java ärfaller arv från Throwable class. Fel står vanligtvis för allvarliga problem som programmeraren (eller ansökan) inte ska försöka fånga. Fel är helt enkelt onormala förhållanden, som aldrig förväntas inträffa under normala omständigheter och därför aldrig förutses. Till exempel är OutOfMemoryError, StackOverflowError och ThreadDead sådana fel. Metoder ska aldrig ha hanterare för fel.

Vad är skillnaden mellan undantag och fel?

Både fel och undantag är oönskade händelser under genomförandet av ett program. De har emellertid viktiga skillnader. Undantag kan förutses av programmeraren, medan ett fel är svårt att förutse. Undantag kan kontrolleras eller avmarkeras. Men fel är alltid okontrollerade. Undantag visar typiskt ett fel som orsakas av programmeraren. Fel uppstår emellertid på grund av ett systemfel eller en olämplig användning av en resurs. Undantag bör därför hanteras på ansökningsnivå, medan fel bör tas hand om på systemnivå (endast om möjligt). Efter hantering av ett undantag, är du garanterad att återgå till normalt programflöde. Men även om ett fel upptas kan programmeraren inte veta hur man hanterar det i första hand. Till skillnad från traditionell felhantering tillåter undantag separering av felhanteringskod från vanlig kod.