Skillnaden mellan undantag och fel

Skillnaden mellan undantag och fel
Skillnaden mellan undantag och fel

Video: Skillnaden mellan undantag och fel

Video: Skillnaden mellan undantag och fel
Video: Hub, Switch, & Router Förklarad - Vad är skillnaden? 2024, Juli
Anonim

Undantag vs Error

Oväntat beteende kommer säkert 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 tillstånd som kan anses omöjliga att återställa. Undantag är oftast relaterade till själva applikationen, medan fel är relaterade till systemet som programmet körs på.

Vad är ett undantag?

Undantag är en händelse som kan störa det normala programflödet. Namnundantaget kommer från "exceptionell händelse". Att kasta ett undantag är processen att skapa ett undantagsobjekt och lämna över det till runtime-systemet. Exception-objekt skapas med metoden där undantaget inträffade. Exception-objektet innehåller användbar information såsom typen och beskrivningen av undantaget. När runtime-systemet tar emot undantagsobjektet kommer det att försöka hitta någon som kan hantera det inom anropsstacken genom att gå igenom det i omvänd ordning (i vilken metoderna anropades). Call stack är den ordnade listan över metoder som anropades före metoden där undantaget inträffade. Runtime-systemet är framgångsrikt om det hittar en metod med en undantagshanterare. Undantagshanterare är ett kodblock som officiellt kan hantera nämnda undantag. Om runtime-systemet hittar en lämplig hanterare (dvs typen av undantag matchar typen som kan hanteras), kommer det att skicka undantagsobjektet till hanteraren. Detta kallas att fånga undantaget. Men om undantaget inte kan hanteras kommer programmet att avslutas. I Java ärver undantag från 'Throwable class'. NullPointerException och ArrayIndexOutOfBoundsException är två vanliga undantag i Java.

Vad är ett fel?

Ett fel är ett tillstånd som kan anses vara oåterkalleligt, till exempel att programmet kräver en mängd minne som är större än vad som är tillgängligt. Dessa fel kan inte hanteras under körning. Om ett fel uppstår kommer programmet att avslutas. I Java ärver fel från Throwable-klassen. Fel står vanligtvis för allvarliga problem som programmeraren (eller applikationen) inte ska försöka fånga upp. 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 förekomster under körningen av ett program. Men de har viktiga skillnader. Undantag kan förutses av programmeraren, medan ett fel är svårt att förutse. Undantag kan markeras eller avmarkeras. Men fel är alltid okontrollerade. Undantag indikerar vanligtvis ett fel orsakat av programmeraren. Däremot uppstår fel på grund av ett systemfel eller en olämplig användning av en resurs. Därför bör undantag hanteras på applikationsnivå, medan fel bör tas om hand på systemnivå (endast om möjligt). Efter att ha hanterat ett undantag kommer du garanterat att återgå till norm alt programflöde. Men även om ett fel upptäcks kanske programmeraren inte vet hur han ska hantera det i första hand. Till skillnad från traditionell felhantering tillåter undantag att felhanteringskod separeras från vanlig kod.

Rekommenderad: