Εξαιρέσεις είναι μια θεμελιώδης έννοια στον προγραμματισμό Java, που σε βοηθά να διαχειρίζεσαι απρόβλεπτες καταστάσεις στον κώδικά σου. Ενώ έχεις ήδη μάθει πώς να χειρίζεσαι τις εξαιρέσεις, είναι ώρα να προχωρήσεις ένα βήμα παραπέρα: να ρίχνετε και ορίζετε τις δικές σου εξαιρέσεις. Σε αυτόν τον οδηγό θα σου δείξω πώς να δημιουργείς εξαιρέσεις στον κώδικά σου και να δημιουργείς προσαρμοσμένες κλάσεις εξαιρέσεων, που θα σε βοηθήσουν να κάνεις τον κώδικά σου πιο σαφή και πιο ανθεκτικό.
Σημαντικότερα συμπεράσματα
- Μπορείς να ρίχνεις τις δικές σου εξαιρέσεις στην Java, για να διαχειρίζεσαι καλύτερα συγκεκριμένες καταστάσεις σφάλματος.
- Ορίζοντας τις δικές σου κλάσεις εξαιρέσεων, μπορείς να κάνεις τη διαχείριση σφαλμάτων σου πιο φυσική και κατανοητή.
- Θα μάθεις πώς να ρίχνεις εξαιρέσεις τόσο σε μεθόδους όσο και πώς να εργάζεσαι σε σχέση με μπλοκ Try-Catch.
Οδηγία βήμα-βήμα
1. Ανακεφαλαίωση της διαχείρισης εξαιρέσεων
Στην αρχή είναι σημαντικό να θυμάσαι πώς είναι η διαχείριση των εξαιρέσεων στην Java. Μπορείς να θυμηθείς, για παράδειγμα, τις κατασκευές try-catch που σου επιτρέπουν να συλλαμβάνεις σφάλματα και να ανταγωνίζεσαι κατάλληλα. Στην προηγούμενη πορεία έχεις δει πώς να χειρίζεσαι μια NumberFormatException, όταν γίνεται μια μη έγκυρη μετατροπή από μια συμβολοσειρά σε έναν αριθμό.
2. Εξαιρέσεις στον δικό σου κώδικα
Τώρα θέλουμε να δούμε πώς μπορείς να ρίχνεις εξαιρέσεις στον δικό σου κώδικα. Αυτό μπορεί να είναι ιδιαίτερα χρήσιμο όταν θέλεις να ορίσεις συγκεκριμένες συνθήκες σφάλματος στα προγράμματά σου που δεν αντιμετωπίζονται από προεπιλογή στην Java.

3. Δημιουργία κλάσης για έλεγχο
Ας δούμε μια παράδειγμα κλάση την οποία θα ονομάσουμε MeinValidator. Αυτή η κλάση λαμβάνει μια μέθοδο που περιμένει ένα τμήμα κώδικα προς έλεγχο, στην περίπτωση μας έναν κωδικό PIN. Εάν ο εισαγόμενος κωδικός PIN δεν αντιστοιχεί σε μια συγκεκριμένη τιμή, ρίχνεται μια εξαίρεση.
4. Δημιουργία και σύλληψη σφαλμάτων
Μέσα στη μέθοδο validateCode, μπορείς να δημιουργήσεις μια δήλωση if. Εάν ο κωδικός δεν αντιστοιχεί στην αναμενόμενη τιμή, ρίχνεις μια νέα εξαίρεση, που μοιάζει ως εξής: throw new Exception("Μόνο το 42 είναι η απάντηση σε όλες τις ερωτήσεις.");. Εδώ χρησιμοποιείς την εντολή throw για να δημιουργήσεις την εξαίρεση.
5. Προσαρμογή της υπογραφής της μεθόδου
Για να δηλώσεις ότι αυτή η μέθοδος μπορεί να ρίξει μια εξαίρεση, πρέπει να προσθέσεις το λέξη-κλειδί throws στην υπογραφή της μεθόδου. Το αποτέλεσμα είναι ότι η μέθοδος πλέον ονομάζεται: public void validateCode(int code) throws Exception. Με αυτόν τον τρόπο, η ρίψη της εξαίρεσης επικοινωνείται σαφώς και όλοι οι καλούντες της μεθόδου είναι υποχρεωμένοι να τη διαχειριστούν.
6. Διαχείριση εξαίρεσης σε μπλοκ Try-Catch
Για να συλλάβεις την εξαίρεση, μπορείς να βάλεις τη μέθοδο σε ένα μπλοκ try-catch. Σε αυτή την περίπτωση, όταν προκύψει μια εξαίρεση, εκτελείται ο κωδικός στο μπλοκ catch, όπου πραγματοποιείς τη συγκεκριμένη διαχείριση σφάλματος, π.χ. με την εμφάνιση ενός μηνύματος σφάλματος.
7. Προαιρετική εκ νέου ρίψη εξαιρέσεων
Μπορείς επίσης να σκεφτείς να ρίξεις ξανά μια συλληφθείσα εξαίρεση, για να την προωθήσεις σε μια ανώτερη λογική στρώση. Ωστόσο, θα πρέπει να προσέξεις ότι αυτό έχει νόημα μόνο αν δεν βρίσκεσαι αυτή τη στιγμή στην κύρια μέθοδο, καθώς εδώ μετά το μπλοκ catch συνήθως δεν ακολουθεί άλλος κώδικας.
8. Τα πλεονεκτήματα των δικών σου εξαιρέσεων
Το μεγαλύτερο πλεονέκτημα των δικών σου κλάσεων εξαιρέσεων είναι ότι ονομάζονται διαισθητικά και είναι συγκεκριμένες για την εφαρμογή. Αντί να εργάζεσαι με γενικές εξαιρέσεις, μπορείς να ορίσεις συγκεκριμένες κλάσεις όπως NotFoundException ή InvalidInputException. Αυτές σε βοηθούν όχι μόνο στην αναγνώριση σφαλμάτων, αλλά και στην αποσφαλματοποίηση και συντήρηση του κώδικά σου.

Σύνοψη – Ρίψτε και ορίστε εξαιρέσεις στην Java
Ρίχνοντας και ορίζοντας τις δικές σας εξαιρέσεις, αποκτάς ένα ισχυρό εργαλείο στα χέρια σου για να διαχειρίζεσαι σφάλματα αποτελεσματικά και να κάνεις τον κώδικά σου πιο ευανάγνωστο. Μπορείς να διατυπώσεις συγκεκριμένες συνθήκες εξαίρεσης και να βελτιώσεις τη λογική διαχωρισμού σφαλμάτων, αυξάνοντας έτσι τη συντηρησιμότητα του προγράμματός σου.
Συχνές ερωτήσεις
Ποια είναι η διαφορά μεταξύ checked και unchecked εξαιρέσεων;Οι checked εξαιρέσεις πρέπει να αντιμετωπίζονται στην υπογραφή της μεθόδου, ενώ οι unchecked εξαιρέσεις αυτό δεν είναι υποχρεωτικό.
Γιατί να δημιουργήσω τις δικές μου εξαιρέσεις;Οι δικές σου εξαιρέσεις βοηθούν με συγκεκριμένα μηνύματα σφάλματος, που στοχεύουν στην καλύτερη αναγνώριση προβλημάτων και στην ευανάγνωστη μεταγραφή του κώδικα.
Πώς να ρίξω μια εξαίρεση σε μια μέθοδο;Χρησιμοποιείς τη λέξη-κλειδί throw, ακολουθούμενη από μια νέα περίσταση της εξαίρεσης.
Πρέπει να δηλώσω στην κλάση της μεθόδου ότι ρίχνω μια εξαίρεση;Ναι, για αυτό χρησιμοποιείς το λέξη-κλειδί throws στην υπογραφή της μεθόδου.
Τι συμβαίνει αν δεν διαχειριστώ μια εξαίρεση;Το πρόγραμμα γενικά θα τερματίσει με μια runtime exception, εκτός αν η εξαίρεση είναι μη έγκυρη και δεν έχει διαχειριστεί.