Συνιστάται, 2024

Επιλογή Συντάκτη

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

"Throwable" είναι η γονική κλάση των τάξεων Error and Exception. Η κλάση "RuntimeException" και οι υποκατηγορίες της, η κλάση "Σφάλμα" και οι κλάσεις της είναι οι "Μη ελεγχόμενες εξαιρέσεις", ενώ οι υπόλοιπες υποκατηγορίες της κλάσης "Εξαίρεση" εκτός από "RuntimeException" είναι οι ελεγμένες εξαιρέσεις. Η βασική διαφορά μεταξύ της ελεγχόμενης και μη ελεγχόμενης εξαίρεσης είναι ότι οι ελεγμένες εξαιρέσεις ελέγχονται από τον μεταγλωττιστή, ενώ ο μεταγλωττιστής δεν ελέγχει τις ανεξέλεγκτες εξαιρέσεις .

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

Συγκριτικό διάγραμμα

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

Ορισμός της ελεγχόμενης εξαίρεσης

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

 εισαγωγή java.io. *; class Παράδειγμα {δημόσιο static κενό main (String args []) {FileInputStream fis = null; fis = νέο αρχείο FileInputStream ("B: /myfile.txt"); // Αυτός ο κατασκευαστής FileInputStream (όνομα αρχείου αρχείου) ρίχνει το FileNotFoundException, το οποίο είναι εξακριβωμένη εξαίρεση. int k; ενώ ((k = fis.read ())! = -1) {// Η μέθοδος read () της κλάσης FileInputStream ρίχνει επίσης μια εξακριβωμένη εξαίρεση: IOException. System.out.print ((char) k) } fis.close (); // Η μέθοδος close () κλείνει την είσοδο αρχείου που ρίχνει το IOException. }} 

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

Ορισμός της ανεξέλεγκτης εξαίρεσης

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

Ας δούμε ένα παράδειγμα μιας ανεξέλεγκτης εξαίρεσης.

 τάξη Παράδειγμα {δημόσιο στατικό κενό κύριο (String args []) {int arr [] = {1, 2, 3, 4, 5}; System.out.println (arr [7]); // ArrayIndexOutOfBoundsException. }} 

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

Βασικές διαφορές μεταξύ εξακριβωμένης και ανεξέλεγκτης εξαίρεσης

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

Σημείωση :

Τόσο η ελεγχόμενη είτε η ανεξέλεγκτη εξαίρεση συμβαίνει υποχρεωτικά κατά τη διάρκεια του χρόνου εκτέλεσης. Αυτά ελέγχονται ή δεν ελέγχονται μόνο από τον μεταγλωττιστή κατά τη διάρκεια της μεταγλώττισης.

Συμπέρασμα:

Τόσο οι ελεγμένες όσο και οι ανεξέλεγκτες εξαιρέσεις πρέπει να διεκπεραιώνονται για την ομαλή εκτέλεση του προγράμματος.

Top