Διαφορά μεταξύ εξαίρεσης και σφάλματος
Εξαίρεση έναντι σφάλματος
Η απροσδόκητη συμπεριφορά είναι υποχρεωτική όταν εκτελείται ένα πρόγραμμα. Αυτό μπορεί να οφείλεται σε εξαιρέσεις ή σφάλματα. Εξαιρέσεις είναι γεγονότα που μπορούν να διαταράξουν την κανονική ροή του προγράμματος. Τα σφάλματα είναι συνθήκες που μπορούν να θεωρηθούν ανεπανόρθωτες. Οι εξαιρέσεις σχετίζονται κυρίως με την ίδια την εφαρμογή, ενώ τα σφάλματα σχετίζονται με το σύστημα στο οποίο εκτελείται το πρόγραμμα.
Τι είναι η εξαίρεση;
Η εξαίρεση είναι ένα συμβάν, το οποίο μπορεί να διαταράξει την κανονική ροή του προγράμματος. Η εξαίρεση ονόματος προέρχεται από "εξαιρετικό γεγονός". Ο ρίχνοντας μια εξαίρεση είναι η διαδικασία δημιουργίας ενός αντικειμένου εξαίρεσης και η παράδοσή του στο σύστημα χρόνου εκτέλεσης. Το αντικείμενο εξαίρεσης δημιουργείται με τη μέθοδο στην οποία έγινε η εξαίρεση. Το αντικείμενο εξαίρεσης περιέχει χρήσιμες πληροφορίες, όπως τον τύπο και την περιγραφή της εξαίρεσης. Όταν το σύστημα χρόνου εκτέλεσης λαμβάνει το αντικείμενο εξαίρεσης, θα προσπαθήσει να βρει κάποιον που θα το χειριστεί μέσα στη στοίβα κλήσεων μεταφέροντάς την με αντίστροφη σειρά (στην οποία κλήθηκαν οι μέθοδοι). Η στοίβα κλήσεων είναι η λίστα των μεθόδων που ονομάζονταν πριν από τη μέθοδο στην οποία έγινε η εξαίρεση. Το σύστημα χρόνου εκτέλεσης είναι επιτυχές εάν εντοπίσει μια μέθοδο με χειριστή εξαιρέσεων. Ο χειριστής εξαίρεσης είναι ένα μπλοκ κώδικα που μπορεί επίσημα να χειριστεί την εν λόγω εξαίρεση. Εάν το σύστημα χρόνου εκτέλεσης εντοπίσει έναν κατάλληλο χειριστή (δηλαδή ο τύπος εξαίρεσης αντιστοιχεί στον τύπο που μπορεί να χειριστεί), θα περάσει το αντικείμενο εξαίρεσης στον χειριστή. Αυτό ονομάζεται σύλληψη της εξαίρεσης. Ωστόσο, εάν η εξαίρεση δεν μπορεί να αντιμετωπιστεί, το πρόγραμμα τερματίζεται. Στην Java, εξαιρέσεις κληρονομούνται από την κατηγορία Throwable. 'NullPointerException και ArrayIndexOutOfBoundsException είναι δύο κοινές εξαιρέσεις στην Java.
Τι είναι ένα σφάλμα;
Ένα σφάλμα είναι μια κατάσταση που μπορεί να θεωρηθεί μη ανακτήσιμη, όπως το πρόγραμμα που απαιτεί ποσότητα μνήμης μεγαλύτερη από ό, τι είναι διαθέσιμη. Αυτά τα σφάλματα δεν μπορούν να αντιμετωπιστούν κατά το χρόνο εκτέλεσης. Εάν παρουσιαστεί σφάλμα, το πρόγραμμα τερματίζεται. Στην Java, κληρονομούνται λάθη από την κατηγορία Throwable. Τα σφάλματα συνήθως αντιπροσωπεύουν σοβαρά προβλήματα που ο προγραμματιστής (ή η εφαρμογή) δεν πρέπει να προσπαθήσει να πιάσει. Τα σφάλματα είναι απλώς ανώμαλες συνθήκες, οι οποίες δεν αναμένεται ποτέ να εμφανιστούν υπό κανονικές συνθήκες και συνεπώς δεν προβλέπονται ποτέ. Για παράδειγμα, OutOfMemoryError, StackOverflowError και ThreadDead είναι τέτοια σφάλματα. Οι μέθοδοι δεν πρέπει ποτέ να έχουν χειριστές για σφάλματα.
Ποια είναι η διαφορά μεταξύ εξαίρεσης και σφάλματος;
Και τα δύο σφάλματα και οι εξαιρέσεις είναι ανεπιθύμητη εμφάνιση κατά την εκτέλεση ενός προγράμματος. Ωστόσο, έχουν βασικές διαφορές. Εξαιρέσεις μπορούν να προβλεφθούν από τον προγραμματιστή, ενώ είναι δύσκολο να προβλεφθεί ένα σφάλμα.Εξαιρέσεις μπορούν να ελεγχθούν ή να μην επιλεγούν. Αλλά τα σφάλματα είναι πάντα ανεξέλεγκτα. Οι εξαιρέσεις συνήθως υποδεικνύουν ένα σφάλμα που προκλήθηκε από τον προγραμματιστή. Ωστόσο, προκύπτουν σφάλματα λόγω σφάλματος συστήματος ή ακατάλληλης χρήσης ενός πόρου. Ως εκ τούτου, οι εξαιρέσεις θα πρέπει να αντιμετωπίζονται σε επίπεδο εφαρμογής, ενώ τα σφάλματα θα πρέπει να ληφθούν υπόψη στο επίπεδο του συστήματος (μόνο αν είναι δυνατόν). Αφού χειριστείτε μια εξαίρεση, σας εγγυάται να επιστρέψετε στην κανονική ροή του προγράμματος. Αλλά ακόμα και αν έχει γίνει ένα σφάλμα, ο προγραμματιστής μπορεί να μην ξέρει πώς να το χειριστεί στην πρώτη θέση. Σε αντίθεση με τον παραδοσιακό χειρισμό σφαλμάτων, οι εξαιρέσεις επιτρέπουν τον διαχωρισμό του κώδικα χειρισμού σφαλμάτων από τον κανονικό κώδικα.