Εξαίρεση Χειρισμός σε Java
Τι είναι η Εξαίρεση σε Java?
Εξαίρεση σε Java είναι ένα συμβάν που διακόπτει την εκτέλεση των εντολών του προγράμματος και διαταράσσει την κανονική ροή της εκτέλεσης του προγράμματος. Είναι ένα αντικείμενο που αναδιπλώνει μια πληροφορία συμβάντος σφάλματος που συνέβη σε μια μέθοδο και μεταβιβάζεται στο σύστημα χρόνου εκτέλεσης. Σε Java, οι εξαιρέσεις χρησιμοποιούνται κυρίως για την ένδειξη διαφορετικών τύπων συνθηκών σφάλματος.
Υπάρχουν δύο είδη σφαλμάτων:
- Μεταγλώττιση χρονικών σφαλμάτων
- Σφάλματα χρόνου εκτέλεσης
Τα σφάλματα χρόνου μεταγλώττισης μπορούν και πάλι να ταξινομηθούν σε δύο τύπους:
- Σφάλματα σύνταξης
- Σημασιολογικά λάθη
Παράδειγμα συντακτικών σφαλμάτων:
Αντί να δηλώσει int a;
κατά λάθος το δηλώσατε ως in a;
για ποιον μεταγλωττιστή θα ρίξει ένα σφάλμα.
Παράδειγμα: Έχετε δηλώσει μια μεταβλητή int a;
και μετά από μερικές γραμμές κώδικα δηλώνετε ξανά έναν ακέραιο ως int a;
. Όλα αυτά τα σφάλματα επισημαίνονται κατά τη μεταγλώττιση του κώδικα.
Παράδειγμα σφαλμάτων χρόνου εκτέλεσης
Ένα σφάλμα χρόνου εκτέλεσης ονομάζεται an εξαιρέσεις σφάλμα. Είναι οποιοδήποτε γεγονός που διακόπτει την κανονική ροή της εκτέλεσης του προγράμματος. Παράδειγμα για εξαιρέσεις είναι η αριθμητική εξαίρεση, η εξαίρεση μηδενικού δείκτη, η διαίρεση με μηδενική εξαίρεση κ.λπ. Εξαιρέσεις σε 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 παρέχει έναν ενσωματωμένο εξαιρετικό χειρισμό.
- Ο κανονικός κώδικας μπαίνει στο a ΔΟΚΙΜΑΣΤΕ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
- Ο κώδικας χειρισμού εξαιρέσεων μπαίνει στο ΑΛΙΕΥΜΑΤΩΝ μπλοκάρουν
Στο παράδειγμά μας, το μπλοκ TRY θα περιέχει τον κωδικό για σύνδεση στον διακομιστή. Το μπλοκ CATCH θα περιέχει τον κωδικό για σύνδεση στον εφεδρικό διακομιστή. Σε περίπτωση που ο διακομιστής είναι ανοιχτός, ο κωδικός στο μπλοκ CATCH θα αγνοηθεί. Σε περίπτωση που ο διακομιστής είναι εκτός λειτουργίας, δημιουργείται μια εξαίρεση και ο κώδικας στο μπλοκ catch θα εκτελεστεί.
Έτσι, έτσι αντιμετωπίζεται η εξαίρεση Java.
Σύνταξη για τη χρήση του try & catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Παράδειγμα
Βήμα 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 and catch θα μας βοηθήσει να χειριστούμε αυτήν την εξαίρεση. Θα βάλουμε την εξαίρεση που προκαλεί τη γραμμή κώδικα σε a προσπαθώ μπλοκ, ακολουθούμενο από α αλιευμάτων φραγμός. Αντιγράψτε τον παρακάτω κώδικα στο πρόγραμμα επεξεργασίας.
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 δεν θα εκτελεστεί επειδή Μόλις δημιουργηθεί εξαίρεση, η ροή του ελέγχου μεταπηδά στο μπλοκ αλίευσης.
Σημείωση: Το αντικείμενο AritmeticException "e" φέρει πληροφορίες σχετικά με την εξαίρεση που έχει συμβεί, η οποία μπορεί να είναι χρήσιμη για τη λήψη ενεργειών ανάκτησης.
Java Ιεραρχία τάξης εξαίρεσης
Μετά την εκτέλεση μιας πρότασης catch, οι άλλες παρακάμπτονται και η εκτέλεση συνεχίζεται μετά το μπλοκ try/catch. Τα ένθετα μπλοκ αλίευσης ακολουθούν την ιεραρχία εξαίρεσης.
- Όλες οι τάξεις εξαίρεσης σε Java επεκτείνετε την κλάση «Throwable». Το Throwable έχει δύο υποκατηγορίες, Error και Exception
- Η κλάση Error ορίζει την εξαίρεση ή τα προβλήματα που δεν αναμένεται να προκύψουν υπό κανονικές συνθήκες από το πρόγραμμά μας, παράδειγμα Σφάλμα μνήμης, Σφάλμα υλικού, σφάλμα JVM κ.λπ.
- Η κλάση Exception αντιπροσωπεύει τις εξαιρέσεις που μπορούν να χειριστούν το πρόγραμμά μας και το πρόγραμμά μας μπορεί να ανακτηθεί από αυτήν την εξαίρεση χρησιμοποιώντας το μπλοκ try and catch
- Μια εξαίρεση χρόνου εκτέλεσης είναι μια υποκλάση της κλάσης εξαίρεσης. Η Εξαίρεση αυτού του τύπου αντιπροσωπεύει την εξαίρεση που εμφανίζεται κατά το χρόνο εκτέλεσης και η οποία δεν μπορεί να παρακολουθηθεί κατά το χρόνο μεταγλώττισης. Ένα εξαιρετικό παράδειγμα του ίδιου είναι η διαίρεση με μηδενική εξαίρεση ή η εξαίρεση μηδενικού δείκτη κ.λπ
- Η εξαίρεση IO δημιουργείται κατά τις λειτουργίες εισόδου και εξόδου
- Διακοπτόμενες εξαιρέσεις σε Java, δημιουργείται κατά τη διάρκεια πολλαπλών νημάτων.
Παράδειγμα: Για να κατανοήσετε την ένθεση των μπλοκ try and catch
Βήμα 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 Exception. Οποιαδήποτε Εξαίρεση δημιουργείται από το ArithmeticException μπορεί επίσης να αντιμετωπιστεί από την κλάση Exception. Έτσι το μπλοκ catch του ArithmeticException δεν θα έχει ποτέ την ευκαιρία να εκτελεστεί, γεγονός που το καθιστά περιττό. Εξ ου και το σφάλμα μεταγλώττισης.
Java Επιτέλους Μπλοκ
Το τελικό μπλοκ είναι εκτελείται ανεξάρτητα από την ύπαρξη εξαίρεσης στο μπλοκ δοκιμής. είναι προαιρετικός για χρήση με ένα μπλοκ δοκιμής.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Σε περίπτωση που εγείρεται μια εξαίρεση στο μπλοκ try, τελικά το μπλοκ εκτελείται μετά την εκτέλεση του μπλοκ 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) Αναμενόμενη έξοδος. Τέλος, το μπλοκ εκτελείται παρόλο που υπάρχει εξαίρεση.
Βήμα 4) Αλλάξτε την τιμή της μεταβλητής d = 1. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα και παρατηρήστε την έξοδο. Κάτω φόρμας
Σύνοψη
- An Εξαίρεση είναι ένα σφάλμα χρόνου εκτέλεσης η οποία διακόπτει την κανονική ροή της εκτέλεσης του προγράμματος.Η διακοπή κατά την εκτέλεση του προγράμματος αναφέρεται ως σφάλμα ή εξαίρεση.
- Τα σφάλματα ταξινομούνται σε δύο κατηγορίες
- Σφάλματα χρόνου μεταγλώττισης – Συντακτικά λάθη, Σημασιολογικά σφάλματα
- Σφάλματα χρόνου εκτέλεσης - Εξαίρεση
- A Το ισχυρό πρόγραμμα θα πρέπει να χειρίζεται όλες τις εξαιρέσεις και να συνεχίσει με την κανονική ροή της εκτέλεσης του προγράμματος. Java παρέχει μια ενσωματωμένη εξαιρετική μέθοδο χειρισμού
- Exception Handler είναι ένα σύνολο κώδικα που χειρίζεται μια εξαίρεση. Εξαιρέσεις μπορούν να αντιμετωπιστούν Java χρησιμοποιώντας το try & catch.
- Δοκιμάστε να μπλοκάρετε: Ο κανονικός κώδικας πηγαίνει σε αυτό το μπλοκ.
- Μπλοκ αλίευσης: Εάν υπάρχει σφάλμα στον κανονικό κώδικα, τότε θα μπει σε αυτό το μπλοκ