Εξαίρεση Χειρισμός σε Java
⚡ Έξυπνη Σύνοψη
Java Ο Χειρισμός Εξαιρέσεων παρέχει έναν δομημένο μηχανισμό για τη διαχείριση σφαλμάτων χρόνου εκτέλεσης που διαταράσσουν την κανονική ροή του προγράμματος. Χρησιμοποιεί λέξεις-κλειδιά try, catch, finally, throw και throws για την ανίχνευση, την απομόνωση και την ανάκτηση από εξαιρετικές συνθήκες, διατηρώντας παράλληλα...ping εφαρμογές ισχυρές και προβλέψιμες.

Τι είναι μια εξαίρεση στο Java?
An Εξαίρεση σε Java είναι ένα συμβάν που διακόπτει την εκτέλεση των εντολών του προγράμματος και διαταράσσει την κανονική ροή εκτέλεσης του προγράμματος. Είναι ένα αντικείμενο που περιβάλλει μια πληροφορία συμβάντος σφάλματος που παρουσιάστηκε μέσα σε μια μέθοδο και μεταβιβάζεται στο σύστημα εκτέλεσης. Στο Java, οι εξαιρέσεις χρησιμοποιούνται κυρίως για την επισήμανση διαφορετικών τύπων συνθηκών σφάλματος, έτσι ώστε οι προγραμματιστές να μπορούν να ανταποκρίνονται σε αυτές με ελεγχόμενο τρόπο.
Υπάρχουν δύο ευρείες κατηγορίες σφαλμάτων στο Java:
- Μεταγλώττιση χρονικών σφαλμάτων
- Σφάλματα χρόνου εκτέλεσης
Τα σφάλματα χρόνου μεταγλώττισης μπορούν να ταξινομηθούν σε δύο επιπλέον τύπους:
- Σφάλματα σύνταξης
- Σημασιολογικά λάθη
Παράδειγμα συντακτικών σφαλμάτων:
Αντί να δηλώσει int a; κατά λάθος το δηλώσατε ως in a;, για το οποίο ο μεταγλωττιστής θα εμφανίσει σφάλμα.
Παράδειγμα Σημασιολογικών Σφαλμάτων: Έχετε δηλώσει μια μεταβλητή int a; και μετά από μερικές γραμμές κώδικα δηλώνετε ξανά έναν ακέραιο ως int a;. Όλα αυτά τα σφάλματα επισημαίνονται κατά τη μεταγλώττιση του κώδικα.
Παράδειγμα σφαλμάτων χρόνου εκτέλεσης
Ένα σφάλμα χρόνου εκτέλεσης αναφέρεται ως ΕξαίρεσηΕίναι οποιοδήποτε συμβάν που διακόπτει την κανονική ροή εκτέλεσης προγράμματος. Παραδείγματα εξαιρέσεων περιλαμβάνουν την αριθμητική εξαίρεση, την εξαίρεση NullPointerException, την εξαίρεση διαίρεσης με το μηδέν και πολλά άλλα. Εξαιρέσεις στο Java είναι συνθήκες που συχνά βρίσκονται εκτός του άμεσου ελέγχου ενός προγραμματιστή.
Πατήστε εδώ εάν το βίντεο δεν είναι προσβάσιμο
Γιατί χρειαζόμαστε τον χειρισμό εξαιρέσεων;
Ας υποθέσουμε ότι έχετε κωδικοποιήσει ένα πρόγραμμα για πρόσβαση σε έναν διακομιστή. Τα πράγματα λειτουργούν καλά όσο εσείς το αναπτύσσετε.ping τον κώδικα σε τοπικό περιβάλλον με ελεγχόμενες συνθήκες.
Κατά τη διάρκεια μιας πραγματικής εκτέλεσης παραγωγής, ο διακομιστής ενδέχεται να είναι εκτός λειτουργίας. Όταν το πρόγραμμά σας προσπαθεί να αποκτήσει πρόσβαση σε αυτόν, εμφανίζεται μια εξαίρεση και, χωρίς τον κατάλληλο χειρισμό, το πρόγραμμα θα τερματιστεί απότομα.
Πώς να χειριστείτε μια εξαίρεση στο Java
Μέχρι στιγμής έχουμε δει ότι μια εξαίρεση είναι συχνά πέρα από τον έλεγχο ενός προγραμματιστή. Ωστόσο, το να αποδίδουμε την αποτυχία του κώδικα σε περιβαλλοντικά ζητήματα δεν αποτελεί πραγματική λύση. Χρειάζεστε ισχυρό προγραμματισμό που να αντιμετωπίζει εξαιρετικές καταστάσεις. Ένας τέτοιος κώδικας είναι γνωστός ως Χειριστής εξαιρέσεων.
Στο παράδειγμά μας, ο καλός χειρισμός εξαιρέσεων θα σήμαινε ότι όταν ο κύριος διακομιστής είναι εκτός λειτουργίας, το πρόγραμμα συνδέεται αυτόματα σε έναν εφεδρικό διακομιστή.
Για να το εφαρμόσετε αυτό, θα μπορούσατε να γράψετε κώδικα για να συνδεθείτε στον διακομιστή χρησιμοποιώντας τις παραδοσιακές συνθήκες if και else. Θα ελέγξετε αν ο διακομιστής είναι εκτός λειτουργίας και, εάν ναι, θα γράψετε κώδικα για να συνδεθείτε στον εφεδρικό διακομιστή. Αυτή η οργάνωση κώδικα χρησιμοποιώντας κλάδους "if" και "else" δεν είναι αποτελεσματική όταν ο κώδικάς σας έχει πολλαπλούς Java εξαιρέσεις διαχειρίζομαι.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Δοκιμάστε το Catch Block στο Java
Java Παρέχει έναν ενσωματωμένο μηχανισμό χειρισμού εξαιρέσεων που διαχωρίζει την κανονική λογική από τη λογική αποκατάστασης σφαλμάτων.
- Ο κανονικός κώδικας μπαίνει στο a ΔΟΚΙΜΑΣΤΕ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
- Ο κώδικας χειρισμού εξαιρέσεων μπαίνει στο ΑΛΙΕΥΜΑΤΩΝ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
Στο παράδειγμά μας, το μπλοκ TRY θα περιέχει τον κώδικα για τη σύνδεση με τον διακομιστή. Το μπλοκ CATCH θα περιέχει τον κώδικα για τη σύνδεση με τον εφεδρικό διακομιστή. Σε περίπτωση που ο διακομιστής είναι ενεργός, ο κώδικας στο μπλοκ CATCH θα αγνοηθεί. Σε περίπτωση που ο διακομιστής είναι εκτός λειτουργίας, δημιουργείται μια εξαίρεση και ο κώδικας στο μπλοκ catch θα εκτελεστεί.
Έτσι, λοιπόν, αντιμετωπίζεται μια εξαίρεση Java.
Σύνταξη για τη χρήση try και catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Παράδειγμα μπλοκ δοκιμής catch
Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Βήμα 2) Αποθηκεύστε το αρχείο και μεταγλωττίστε τον κώδικα. Εκτελέστε το πρόγραμμα χρησιμοποιώντας την εντολή java. JavaΕξαίρεση.
Βήμα 3) Μια Αριθμητική Εξαίρεση, διαιρώντας με το μηδέν, εμφανίζεται για τη γραμμή 5 και η γραμμή 6 δεν εκτελείται ποτέ.
Βήμα 4) Ας εξετάσουμε τώρα πώς το try και το catch θα μας βοηθήσουν να χειριστούμε αυτήν την εξαίρεση. Θα βάλουμε τη γραμμή κώδικα που προκαλεί την εξαίρεση σε ένα προσπαθώ μπλοκ, ακολουθούμενο από α αλιευμάτων φραγμός. Αντιγράψτε τον παρακάτω κώδικα στο πρόγραμμα επεξεργασίας.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Βήμα 5) Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα. Θα λάβετε το ακόλουθο αποτέλεσμα.
Όπως παρατηρείτε, η εξαίρεση αντιμετωπίζεται και εκτελείται και η τελευταία γραμμή κώδικα. Επίσης, σημειώστε ότι η γραμμή 7 δεν θα εκτελεστεί επειδή Μόλις δημιουργηθεί εξαίρεση, η ροή του ελέγχου μεταπηδά στο μπλοκ αλίευσης.
Σημείωση: Το αντικείμενο ArithmeticException "e" μεταφέρει πληροφορίες σχετικά με την εξαίρεση που έχει προκύψει, οι οποίες μπορούν να είναι χρήσιμες κατά την εκτέλεση ενεργειών ανάκτησης.
Java Ιεραρχία Κλάσης Εξαίρεσης
Αφού εκτελεστεί μία εντολή catch, οι άλλες παρακάμπτονται και η εκτέλεση συνεχίζεται μετά το μπλοκ try και catch. Τα ένθετα μπλοκ catch πρέπει να ακολουθούν την ιεραρχία εξαιρέσεων από την πιο συγκεκριμένη υποκλάση έως την πιο γενική γονική κλάση.
- Όλες οι τάξεις εξαίρεσης σε Java Επεκτείνετε την κλάση Throwable. Η Throwable έχει δύο υποκλάσεις, Error και Exception.
- Η κλάση Error ορίζει τις εξαιρέσεις ή τα προβλήματα που δεν αναμένεται να προκύψουν υπό κανονικές συνθήκες στο πρόγραμμά σας, για παράδειγμα, σφάλμα μνήμης, σφάλμα υλικού ή σφάλμα JVM.
- Η κλάση Exception αντιπροσωπεύει τις εξαιρέσεις που μπορούν να χειριστεί το πρόγραμμά σας και το πρόγραμμά σας μπορεί να ανακάμψει από αυτές τις εξαιρέσεις χρησιμοποιώντας μπλοκ try and catch.
- Μια RuntimeException είναι μια υποκλάση της κλάσης Exception. Οι εξαιρέσεις αυτού του τύπου αντιπροσωπεύουν μη ελεγμένες εξαιρέσεις που εμφανίζονται κατά τον χρόνο εκτέλεσης και δεν μπορούν να ανιχνευθούν κατά τον χρόνο μεταγλώττισης. Καλά παραδείγματα περιλαμβάνουν την εξαίρεση διαίρεσης με το μηδέν και την εξαίρεση δείκτη null.
- Η εξαίρεση IOException δημιουργείται κατά τη διάρκεια των λειτουργιών εισόδου και εξόδου.
- ΔιακοπείσαΕξαίρεσηστο Java δημιουργείται κατά τη διάρκεια πολυνηματικών λειτουργιών όταν ένα νήμα διακόπτεται.
Παράδειγμα: Ένθεση μπλοκ δοκιμής και πιάσματος
Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Βήμα 2) Αποθηκεύστε το αρχείο και μεταγλωττίστε τον κώδικα. Εκτελέστε το πρόγραμμα χρησιμοποιώντας την εντολή, Ιάβα JavaΕξαίρεση.
Βήμα 3) Δημιουργείται ένα ArrayIndexOutOfBoundsException. Αλλάξτε την τιμή του int d σε 0. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.
Βήμα 4) Πρέπει να δημιουργηθεί μια ArithmeticException.
Βήμα 5) Αποσχολιάστε τη γραμμή 10 έως τη γραμμή 12. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.
Βήμα 6) Σφάλμα μεταγλώττισης; Αυτό συμβαίνει επειδή η Exception είναι η βασική κλάση της ArithmeticException. Οποιαδήποτε εξαίρεση που προκύπτει από την ArithmeticException μπορεί επίσης να αντιμετωπιστεί από την κλάση Exception. Έτσι, το μπλοκ catch της ArithmeticException δεν θα έχει ποτέ την ευκαιρία να εκτελεστεί, γεγονός που το καθιστά περιττό. Εξ ου και το σφάλμα μεταγλώττισης.
Java Επιτέλους Μπλοκ
Το τελικό μπλοκ είναι εκτελείται ανεξάρτητα από την ύπαρξη εξαίρεσης στο μπλοκ δοκιμής. είναι προαιρετικά για χρήση με ένα μπλοκ try. Το μπλοκ finally είναι το κατάλληλο μέρος για την απελευθέρωση πόρων όπως συνδέσεις βάσης δεδομένων, αρχεία ή υποδοχές δικτύου.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Εάν προκύψει εξαίρεση στο μπλοκ try, το μπλοκ finally εκτελείται αφού ολοκληρωθεί το μπλοκ catch.
Παράδειγμα τελικά μπλοκαρίσματος
Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Βήμα 2) Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.
Βήμα 3) Αναμενόμενη έξοδος: Το μπλοκ finally εκτελείται παρόλο που προκύπτει μια εξαίρεση.
Βήμα 4) Αλλάξτε την τιμή της μεταβλητής d = 1. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα και παρατηρήστε την έξοδο.
καλυτερα Πρακτικές για Java εξαίρεση Χειρισμός
Η τήρηση μερικών αποδεδειγμένων κανόνων θα σας βοηθήσει να διατηρήσετε το Java κώδικας ανθεκτικός, ευανάγνωστος και εύκολος στην αποσφαλμάτωση:
- Εντοπίστε πρώτα την πιο συγκεκριμένη εξαίρεση και μετά τις πιο γενικές, για να διατηρήσετε την ακεραιότητα της ιεραρχίας εξαιρέσεων.
- Αποφύγετε τα κενά μπλοκ catch. Καταγράψτε τουλάχιστον την εξαίρεση, ώστε να μην χαθεί ποτέ η βασική αιτία.
- Χρησιμοποιήστε το μπλοκ finally ή δοκιμάστε με πόρους για να απελευθερώσετε αρχεία, υποδοχές και συνδέσεις βάσεων δεδομένων.
- Ρίξτε ελεγμένες εξαιρέσεις μόνο όταν ο καλών μπορεί να ανακάμψει εύλογα και χρησιμοποιήστε μη ελεγμένες εξαιρέσεις για σφάλματα προγραμματισμού.
- Τυλίξτε τις εξαιρέσεις χαμηλού επιπέδου σε μια ουσιαστική επιχειρηματική εξαίρεση για να διατηρήσετε το API contracείναι καθαρό.
- Ποτέ μην καταπίνετε το InterruptedException σιωπηλά σε πολυνηματικό κώδικα, επαναφέρετε αντ' αυτού τη σημαία διακοπής.







