Τα σφάλματα είναι τα οφέλη των χρηστών και των προγραμματιστών. Οι προγραμματιστές προφανώς δεν θέλουν τα προγράμματα τους να πέφτουν σε κάθε στροφή και οι χρήστες είναι πλέον τόσο συνηθισμένοι να έχουν λάθη προγράμματα που δεχόμαστε να πληρώσουν την τιμή για το λογισμικό που σχεδόν σίγουρα θα έχει τουλάχιστον ένα σφάλμα το. Ιάβα έχει σχεδιαστεί για να δώσει στον προγραμματιστή μια αθλητική ευκαιρία στο σχεδιασμό μιας εφαρμογής χωρίς σφάλματα. Υπάρχουν εξαιρέσεις που ο προγραμματιστής θα γνωρίζει ότι είναι μια πιθανότητα όταν μια εφαρμογή αλληλεπιδρά με έναν πόρο ή έναν χρήστη και οι εξαιρέσεις αυτές μπορούν να αντιμετωπιστούν. Δυστυχώς, υπάρχουν εξαιρέσεις που ο προγραμματιστής δεν μπορεί να ελέγξει ή απλώς παραβλέπει. Με λίγα λόγια, όλες οι εξαιρέσεις δεν δημιουργούνται ίσες και επομένως υπάρχουν διάφοροι τύποι για τους προγραμματιστές να σκεφτούν.
Μια εξαίρεση είναι ένα γεγονός το οποίο προκαλεί το πρόγραμμα να μην μπορεί να ρέει στην προβλεπόμενη εκτέλεση του. Υπάρχουν τρεις τύποι εξαίρεσης - η εξακριβωμένη εξαίρεση, το σφάλμα και η εξαίρεση εκτέλεσης χρόνου εκτέλεσης.
Η ελεγμένη εξαίρεση
Οι εξακριβώσεις που ελέγχονται είναι εξαιρέσεις στις οποίες θα πρέπει να μπορεί να αντιμετωπίσει μια εφαρμογή Java. Για παράδειγμα, εάν μια εφαρμογή διαβάζει δεδομένα από ένα αρχείο θα πρέπει να είναι σε θέση να χειριστεί το FileNotFoundException
. Εξάλλου, δεν υπάρχει εγγύηση ότι ο αναμενόμενος φάκελος θα είναι εκεί που θα έπρεπε να είναι. Οτιδήποτε θα μπορούσε να συμβεί στο σύστημα αρχείων, το οποίο μια εφαρμογή δεν θα είχε καμιά ένδειξη.
Για να πάρετε αυτό το παράδειγμα ένα βήμα παραπέρα. Ας υποθέσουμε ότι χρησιμοποιούμε το FileReader
για να διαβάσετε ένα αρχείο χαρακτήρων. Αν έχετε μια ματιά στο Ο ορισμός του κατασκευαστή του FileReader στο Java api θα δείτε την υπογραφή της μεθόδου:
δημόσιο αρχείο ανάγνωσης αρχείων (String fileName) ρίχνει FileNotFoundException.
Όπως μπορείτε να δείτε ο κατασκευαστής δηλώνει συγκεκριμένα ότι το FileReader
κατασκευαστής μπορεί να ρίξει ένα FileNotFoundException
. Αυτό έχει νόημα, καθώς είναι πολύ πιθανό ότι το όνομα αρχείου
Η συμβολοσειρά θα είναι λάθος από καιρό σε καιρό. Κοιτάξτε τον ακόλουθο κώδικα:
δημόσιο static κενό main (String [] args) { FileReader fileInput = null; // Ανοίξτε το αρχείο εισόδου. fileInput = νέος FileReader ("Untitled.txt"); }
Συνθετικά οι δηλώσεις είναι σωστές, αλλά ο κώδικας αυτός δεν θα καταρτιστεί ποτέ. Ο μεταγλωττιστής γνωρίζει το FileReader
κατασκευαστής μπορεί να ρίξει ένα FileNotFoundException
και εξαρτάται από τον καλούντα κώδικα για να χειριστεί αυτήν την εξαίρεση. Υπάρχουν δύο επιλογές - καταρχάς μπορούμε να περάσουμε την εξαίρεση από τη μέθοδο μας καθορίζοντας a ρίχνει
επίσης:
δημόσιο static κενό main (String [] args) ρίχνει FileNotFoundException { FileReader fileInput = null; // Ανοίξτε το αρχείο εισόδου. fileInput = νέος FileReader ("Untitled.txt"); }
Ή μπορούμε πραγματικά να χειριστούμε με την εξαίρεση:
δημόσιο static κενό main (String [] args) { FileReader fileInput = null; δοκιμάστε. { // Ανοίξτε το αρχείο εισόδου. fileInput = νέος FileReader ("Untitled.txt"); } αλιευμάτων (FileNotFoundException ex) { // πείτε στο χρήστη να πάει και να βρει το αρχείο. } }
Οι καλά γραμμένες εφαρμογές Java θα πρέπει να είναι σε θέση να αντιμετωπίσουν τις ελεγμένες εξαιρέσεις.
Σφάλματα
Το δεύτερο είδος εξαίρεσης είναι γνωστό ως λάθος. Όταν συμβαίνει μια εξαίρεση JVM θα δημιουργήσει ένα αντικείμενο εξαίρεσης. Αυτά τα αντικείμενα προέρχονται όλα από το Πτυσσόμενο
τάξη. ο Πτυσσόμενο
η κλάση έχει δύο κύριες υποκατηγορίες - Λάθος
και Εξαίρεση
. ο Λάθος
Η κατηγορία αυτή υποδηλώνει μια εξαίρεση που μια εφαρμογή δεν είναι πιθανό να είναι σε θέση να αντιμετωπίσει.
Αυτές οι εξαιρέσεις θεωρούνται σπάνιες. Για παράδειγμα, η JVM μπορεί να εξαντλήσει τους πόρους λόγω του ότι το υλικό δεν είναι σε θέση να αντιμετωπίσει όλες τις διαδικασίες που πρέπει να αντιμετωπίσει. Είναι πιθανό η εφαρμογή να εντοπίσει το σφάλμα για να ειδοποιήσει τον χρήστη, αλλά συνήθως η εφαρμογή θα πρέπει να κλείσει μέχρι να αντιμετωπιστεί το υποκείμενο πρόβλημα.
Εξαιρέσεις χρόνου εκτέλεσης
ΕΝΑ runtime exception συμβαίνει απλά επειδή ο προγραμματιστής έκανε λάθος. Έχετε γράψει τον κώδικα, όλα φαίνονται καλά στον μεταγλωττιστή και όταν πηγαίνετε να εκτελέσετε τον κώδικα, πέφτει πάνω γιατί αυτό προσπάθησε να αποκτήσει πρόσβαση σε ένα στοιχείο ενός πίνακα που δεν υπάρχει ή ένα λογικό σφάλμα προκάλεσε μια μέθοδο που καλείται με μηδενική αξία. Ή οποιοδήποτε αριθμό λαθών μπορεί να κάνει ο προγραμματιστής. Αλλά αυτό είναι εντάξει, εντοπίζουμε αυτές τις εξαιρέσεις εξαντλητικά, σωστά;
Τα σφάλματα και οι εξαιρέσεις Runtime εμπίπτουν στην κατηγορία μη ελεγμένων εξαιρέσεων.