Διαφορά μεταξύ εξαιρέσεων ελέγχου και εξαίρεσης χρόνου εκτέλεσης

Anonim

Έλεγχος εξαίρεσης έναντι εξαίρεσης χρόνου εκτέλεσης

Οι εξαιρέσεις είναι ειδικοί τύποι συμβάντων, οι οποίοι μπορούν να διαταράξουν την κανονική ροή του προγράμματος. Η εξαίρεση ονόματος προέρχεται από "εξαιρετικό γεγονός". Ο ρίχνοντας μια εξαίρεση είναι η διαδικασία δημιουργίας ενός αντικειμένου εξαίρεσης και η παράδοσή του στο σύστημα χρόνου εκτέλεσης. Όταν το σύστημα χρόνου εκτέλεσης λαμβάνει το αντικείμενο εξαίρεσης, θα προσπαθήσει να βρει κάποιον που θα το χειριστεί μέσα στη στοίβα κλήσεων μεταφέροντάς την με αντίστροφη σειρά (στην οποία κλήθηκαν οι μέθοδοι). Το σύστημα χρόνου εκτέλεσης είναι επιτυχές εάν εντοπίσει μια μέθοδο με χειριστή εξαιρέσεων. Ο χειριστής εξαίρεσης είναι ένα μπλοκ κώδικα που μπορεί επίσημα να χειριστεί την εν λόγω εξαίρεση. Εάν το σύστημα χρόνου εκτέλεσης εντοπίσει έναν κατάλληλο χειριστή, θα περάσει το αντικείμενο εξαίρεσης στον χειριστή. Αυτό ονομάζεται σύλληψη της εξαίρεσης. Ωστόσο, εάν η εξαίρεση δεν μπορεί να αντιμετωπιστεί, το πρόγραμμα τερματίζεται. Στην Java, οι εξαιρέσεις κληρονομούνται από την κατηγορία Throwable. Οι εξακριβώσεις που ελέγχονται είναι εξαιρέσεις σχετικά με τις οποίες ο διαχειριστής επιβάλλει το χειρισμό. Οι εξαιρέσεις χρόνου εκτέλεσης είναι ένας τύπος εξαιρέσεων, οι οποίες δεν ελέγχονται από τον μεταγλωττιστή.

Τι είναι μια ελεγχόμενη εξαίρεση;

Έλεγχοι Οι εξαιρέσεις είναι είτε αντικείμενα της java κατηγορίας. lang. εξαίρεση ή τις υποκατηγορίες του (εκτός από το java.lang, RuntimeException και τις υποκατηγορίες του). Οι ελεγμένες εξαιρέσεις "ελέγχονται" κατά τον χρόνο σύνταξης. Αυτό σημαίνει ότι ο προγραμματιστής πρέπει είτε να πιάσει είτε να ρίξει αυτές τις εξαιρέσεις, αλλιώς ο συντάκτης θα διαμαρτυρηθεί (προκαλώντας σφάλμα μεταγλωττιστή). Εξαιτίας αυτού του λόγου, πολλές εξακριβωμένες εξαιρέσεις είναι πολύ γνωστές στους προγραμματιστές. Για παράδειγμα, η IOException και οι δευτερεύουσες κλάσεις της είναι εξακριβωμένες εξαιρέσεις και όποτε ο προγραμματιστής ασχολείται με την πρόσβαση ή την τροποποίηση ενός αρχείου, οι μεταγλωττιστές ελέγχουν για να βεβαιωθούν ότι όλες οι πιθανές IOExceptions φροντίζονται από τον προγραμματιστή.

Τι είναι η εξαίρεση κατά τη διάρκεια εκτέλεσης;

Εξαιρέσεις χρόνου εκτέλεσης αποτελούνται από java. lang. RuntimeException και όλες τις υπο-κατηγορίες του. Θεωρητικά, εξυπηρετούν τον ίδιο σκοπό με τις ελεγχόμενες εξαιρέσεις και μπορούν να πεταχτούν ή να χειριστούν ως ελεγχόμενη εξαίρεση, αλλά ο χειρισμός τους δεν επιβάλλεται από τον μεταγλωττιστή. Επομένως, οι εξαιρέσεις Runtime ανήκουν στην οικογένεια μη ελεγμένων εξαιρέσεων. NullPointerException, NumberFormatEception, ClassCastException και ArrayIndexOutOfBoundsException είναι κοινές εξαιρέσεις χρόνου εκτέλεσης σε Java.

Ποια είναι η διαφορά μεταξύ εξαίρεσης που ελέγχεται και εξαίρεσης χρόνου εκτέλεσης;

Αν και οι εξαιρέσεις που ελέγχθηκαν και οι εξαιρέσεις κατά το χρόνο εκτέλεσης είναι ανεπιθύμητες περιπτώσεις κατά την εκτέλεση ενός προγράμματος, έχουν τις διαφορές τους. Ο εξακριβωμένος έλεγχος εξαίρεσης επιβάλλεται από τον μεταγλωττιστή, αλλά οι εξαιρέσεις κατά την εκτέλεση δεν είναι.Επομένως, οι εξακριβωμένες εξαιρέσεις πρέπει να ρίχνονται ή να διακινούνται για να καταρτιστεί ο κώδικας, αλλά δεν υπάρχει τέτοια απαίτηση όσον αφορά τις εξαιρέσεις κατά το χρόνο εκτέλεσης. Συνεπώς, οι εξαιρέσεις κατά την εκτέλεση του προγράμματος ανήκουν σε μη ελεγμένες κατηγορίες εξαιρέσεων μαζί με σφάλματα.

Μειονέκτημα με εξακριβωμένες εξαιρέσεις είναι ότι ο προγραμματιστής πρέπει να το χειριστεί ακόμη και αν δεν ξέρει πώς να. Έτσι, αν ο προγραμματιστής ρίξει μια νέα εξαίρεση χωρίς να τυλίξει το πρωτότυπο, το ίχνος της στοίβας που ανήκει στην αρχική εξαίρεση θα χαθεί. Αυτό είναι όπου εξαιρέσεις runtime έρχονται σε πρακτικό. Επειδή όλες οι εξαιρέσεις χρόνου εκτέλεσης μπορούν να αντιμετωπιστούν σε ένα μόνο μέρος, έτσι οι προγραμματιστές μπορούν να γράψουν μικρότερο ποσό κώδικα. Από την άλλη πλευρά, δεδομένου ότι οι ελεγμένες εξαιρέσεις πρέπει να πιαστούν, δεν υπάρχει καμία έκπληξη για τον προγραμματιστή. Θα γνωρίζει πάντα ποια εξακριβωμένη εξαίρεση θα μπορούσε να πεταχτεί με μια συγκεκριμένη μέθοδο. Σε αντίθεση με αυτό, διάφορες εξαιρέσεις χρόνου εκτέλεσης μπορούν να ρίξουν χωρίς τη γνώση του προγραμματιστή.