java exceptions exception handling with examples
Αυτό το εκπαιδευτικό βίντεο σχετικά με τις εξαιρέσεις Java εξηγεί τα πάντα σχετικά με το Exception Handling στην Java. Θα μάθετε για την ιεραρχία εξαίρεσης, τους τύπους, τις μεθόδους τάξης και άλλα:
Όταν εκτελούμε προγράμματα Java, η κανονική συμπεριφορά ή η κανονική ροή του προγράμματος διακόπτεται, λόγω ορισμένων απροσδόκητων συμβάντων.
Για παράδειγμα, ανοίγουμε ένα αρχείο για ανάγνωση των δεδομένων. Όταν εκτελείται η κλήση Άνοιγμα αρχείου, διαπιστώνουμε ότι λείπει το αρχείο που προσπαθούμε να ανοίξουμε. Αυτό έχει ως αποτέλεσμα τη διακοπή της κανονικής ροής του προγράμματος.
Αυτό το συμβάν που επηρεάζει ή διακόπτει την κανονική ροή του προγράμματος ονομάζεται ' Εξαίρεση '.
=> Επισκεφθείτε εδώ για να εξερευνήσετε τη σειρά εκπαίδευσης Java για όλους.
Εδώ είναι ένα εκπαιδευτικό βίντεο για το χειρισμό εξαιρέσεων Java:
Τι θα μάθετε:
Χειρισμός εξαίρεσης στην Java
Όταν εμφανίζεται μια εξαίρεση στο πρόγραμμα, η εκτέλεση του προγράμματος τερματίζεται. Καθώς πρόκειται για απότομο τερματισμό, το σύστημα δημιουργεί ένα μήνυμα και το εμφανίζει. Το μήνυμα που δημιουργείται από το σύστημα μπορεί να είναι κρυπτό όπως ορισμένοι κωδικοί ή μη αναγνώσιμοι.
Επομένως, ο κανονικός χρήστης πρέπει να καταλάβει γιατί το πρόγραμμα σταμάτησε την εκτέλεση του απότομα, αυτός / αυτή πρέπει να γνωρίζει τον λόγο. Τα μηνύματα που δημιουργούνται από το σύστημα ως αποτέλεσμα της εξαίρεσης ενδέχεται να μην είναι χρήσιμα. Στην Java, μπορούμε να χειριστούμε την εξαίρεση και να παρέχουμε σημαντικά μηνύματα στον χρήστη σχετικά με το ζήτημα.
Αυτός ο χειρισμός της εξαίρεσης, κοινώς γνωστός ως 'Εξαίρεση χειρισμού' είναι ένα από τα κύρια χαρακτηριστικά του προγραμματισμού Java.
Λόγοι για την εξαίρεση
Μπορούμε να έχουμε διάφορους λόγους λόγω των οποίων μπορούν να προκύψουν εξαιρέσεις. Εάν πρόκειται για εξαίρεση που σχετίζεται με την εισαγωγή, τότε ο λόγος μπορεί να είναι ότι τα δεδομένα εισαγωγής είναι λανθασμένα ή δυσανάγνωστα.
Εάν λάβουμε μια εξαίρεση για το αρχείο I / O τότε είναι πολύ πιθανό τα αρχεία που αντιμετωπίζουμε να μην υπάρχουν. Κάποια άλλη στιγμή, ενδέχεται να υπάρχουν σφάλματα όπως ζητήματα δικτύου, ο εκτυπωτής δεν είναι διαθέσιμος ή λειτουργεί, κ.λπ.
Σε ένα πρόγραμμα, εκτός από εξαιρέσεις, λαμβάνουμε επίσης σφάλματα. Επομένως, για να αντιμετωπίσουμε αποτελεσματικά τις εξαιρέσεις, πρέπει να γνωρίζουμε τις διαφορές μεταξύ σφάλματος και εξαίρεσης.
Ένα σφάλμα υποδηλώνει ένα πιο σοβαρό πρόβλημα με την εφαρμογή και η εφαρμογή δεν πρέπει να προσπαθήσει να την πιάσει. Αντιθέτως, η εξαίρεση είναι μια προϋπόθεση που θα προσπαθήσει να πιάσει κάθε λογική εφαρμογή.
Έτσι, ένα σφάλμα στην εφαρμογή είναι πιο σοβαρό και οι εφαρμογές θα συντρίψουν όταν αντιμετωπίζουν ένα σφάλμα. Εξαιρέσεις από την άλλη πλευρά εμφανίζονται στον κώδικα και μπορούν να αντιμετωπιστούν από τον προγραμματιστή παρέχοντας διορθωτικές ενέργειες.
Τι είναι ο χειρισμός εξαιρέσεων;
Ο Εξαίρεση χειρισμού σε Java είναι ένας μηχανισμός με τον οποίο διατηρείται η κανονική ροή της εφαρμογής. Για να το κάνουμε αυτό, χρησιμοποιούμε έναν ισχυρό μηχανισμό για τον χειρισμό σφαλμάτων χρόνου εκτέλεσης ή εξαιρέσεων σε ένα πρόγραμμα.
Μια ακολουθία κώδικα που χρησιμοποιείται για τον χειρισμό της εξαίρεσης ονομάζεται 'Εξαίρεση χειριστής'. Ένας χειριστής εξαιρέσεων ανακρίνει το περιβάλλον στο σημείο που συνέβη η εξαίρεση. Αυτό σημαίνει ότι διαβάζει τις μεταβλητές τιμές που βρίσκονταν στο πεδίο εφαρμογής, ενώ προέκυψε η εξαίρεση και, στη συνέχεια, επαναφέρει το πρόγραμμα Java για να συνεχίσει με κανονική ροή.
Οφέλη από τον χειρισμό της εξαίρεσης
Το μεγαλύτερο πλεονέκτημα του Exception handling είναι ότι διατηρεί την κανονική ροή της εφαρμογής παρά την εμφάνιση εξαίρεσης. Όταν συμβαίνει μια εξαίρεση, το πρόγραμμα συνήθως τερματίζεται απότομα.
Η ύπαρξη ενός χειριστή εξαίρεσης σε ένα πρόγραμμα δεν θα προκαλέσει τον απότομο τερματισμό του προγράμματος. Αντ 'αυτού, ένας χειριστής εξαιρέσεων διασφαλίζει ότι όλες οι δηλώσεις του προγράμματος εκτελούνται κανονικά και η ροή του προγράμματος δεν διακόπτεται απότομα.
Ιεραρχία εξαίρεσης στην Ιάβα
Το παρακάτω διάγραμμα δείχνει την ιεραρχία εξαίρεσης στην Java. Η κλάση java.lang.Throwable (απόγονος της κλάσης αντικειμένων) είναι η ρίζα τάξη του Java Exception. Οι τάξεις Εξαίρεση και Σφάλμα προέρχονται από αυτήν την τάξη.
Η κατηγορία εξαίρεσης είναι η βασική κατηγορία για όλες τις άλλες εξαιρέσεις.
Δίνεται παρακάτω μια ιεραρχία της κατηγορίας Εξαίρεσης στην Java που θα απαριθμεί όλες τις μεγάλες εξαιρέσεις που πρέπει να γνωρίζει ένας προγραμματιστής Java.
Κατηγορία εξαίρεσης στην Ιάβα
Όπως φαίνεται στο διάγραμμα ιεραρχίας, η κατηγορία Throwable έχει δύο άμεσες υποκατηγορίες, δηλαδή Εξαίρεση και Σφάλμα. Οι εξαιρέσεις που προκύπτουν από μια εξωτερική πηγή περιγράφονται στην κατηγορία Εξαίρεσης.
Η κατηγορία εξαίρεσης δηλώνει τους κατασκευαστές ως ίδια με την κατηγορία Throwable και η επίκληση κάθε κατασκευαστή επικαλείται επίσης το αντίστοιχο Throwable. Η κλάση εξαίρεσης δεν δηλώνει τις μεθόδους της, κληρονομεί τις μεθόδους κατηγορίας Throwable.
Οι κατασκευαστές και οι μέθοδοι που χρησιμοποιεί η κατηγορία εξαίρεσης παρουσιάζονται παρακάτω.
Κατασκευαστές
Οικοδόμος Περιγραφή δημόσια εξαίρεση () Ένας προεπιλεγμένος κατασκευαστής που δημιουργεί μια νέα εξαίρεση με το μήνυμα ως μηδενικό. δημόσια εξαίρεση (μήνυμα συμβολοσειράς) Κατασκευαστής για την κατασκευή μιας νέας εξαίρεσης με το δεδομένο μήνυμα. Σε αυτήν την περίπτωση, η αιτία δεν έχει αρχικοποιηθεί και μπορεί να χρησιμοποιηθεί μια επακόλουθη κλήση στο Throwable.initCause (java.lang.Throwable) για την προετοιμασία της αιτίας. δημόσια εξαίρεση (Μήνυμα συμβολοσειράς, απορρίψιμη αιτία) Δημιουργεί μια νέα εξαίρεση χρησιμοποιώντας ένα δεδομένο μήνυμα και αιτία. δημόσια εξαίρεση (απορρίψιμη αιτία) Κατασκευάζει μια νέα εξαίρεση με τη δεδομένη αιτία και ένα μήνυμα που δίνεται από το (caus == null? Null: caus.toString ()) (το οποίο συνήθως περιέχει το μήνυμα κατηγορίας και λεπτομέρειας αιτίας). προστατευμένη εξαίρεση (μήνυμα συμβολοσειράς, αιτία ρίψης, boolean activSuppression, boolean writableStackTrace) Δημιουργεί μια νέα εξαίρεση με το δεδομένο μήνυμα, την αιτία, την καταστολή (ενεργοποιημένη ή απενεργοποιημένη) και το εγγράψιμο ίχνος στοίβας (ενεργοποιημένο ή απενεργοποιημένο).
Μέθοδοι
Πρωτότυπο μεθόδου | Περιγραφή |
---|---|
δημόσια συμβολοσειρά getMessage () | Λάβετε ένα λεπτομερές μήνυμα σχετικά με την εξαίρεση που συνέβη. |
δημόσια Throwable getCause () | Λάβετε την αιτία της εξαίρεσης που αντιπροσωπεύεται από ένα αντικείμενο που μπορεί να ρίξει |
δημόσια συμβολοσειρά toString () | Συνενώνει το όνομα της τάξης με το αποτέλεσμα του getMessage () και επιστρέφει την προκύπτουσα συμβολοσειρά. |
public void printStackTrace () | Εκτυπώνει το αποτέλεσμα του toString () και τα περιεχόμενα της ανίχνευσης στοίβας στη ροή εξόδου σφάλματος, System.err. |
δημόσια StackTraceElement () getStackTrace () | Αποκτήστε κάθε στοιχείο στο ίχνος στοίβας με τη μορφή πίνακα. |
δημόσια Throwable fillInStackTrace () | Γεμίστε το ίχνος στοίβας με το τρέχον ίχνος στοίβας. |
Παράδειγμα εξαίρεσης
Στη συνέχεια, παρουσιάζουμε ένα πρόγραμμα Java για να δείξουμε ένα βασικό παράδειγμα εξαίρεσης. Εδώ παρέχουμε μια μεταβλητή συμβολοσειράς που αρχικοποιήθηκε σε μια τιμή null. Όταν προσπαθούμε να εκτυπώσουμε αυτήν τη μεταβλητή, μια εξαίρεση ρίχνεται καθώς η τιμή συμβολοσειράς δεν μπορεί να είναι μηδενική.
class Main { public static void main(String args()){ //declare a String variable and initialize it to null String myStr = null; //print the string System.out.println(myStr.length()); } }
Παραγωγή
Τύποι εξαιρέσεων στην Ιάβα
Η Java υποστηρίζει τρεις τύπους εξαιρέσεων:
- Ελεγμένη εξαίρεση
- Μη επιλεγμένη εξαίρεση
- Λάθος
Σε αυτήν την ενότητα, θα συζητήσουμε και τους τρεις παραπάνω τύπους.
# 1) Έλεγχος εξαίρεσης
Ορισμένες εξαιρέσεις ελέγχονται κατά το χρόνο μεταγλώττισης κατά τη σύνταξη του κώδικα. Αυτές είναι 'ελεγμένες εξαιρέσεις'. Το πρόγραμμα Java ρίχνει ένα σφάλμα συλλογής όταν διαπιστώνει ότι ο κώδικας μέσα σε ένα πρόγραμμα είναι επιρρεπής σε σφάλματα.
Μπορούμε να φροντίσουμε τα σφάλματα συλλογής που ρίχνονται με ελεγμένη εξαίρεση, χειρίζοντας τις εξαιρέσεις είτε περικλείοντας τον κώδικα σε ένα μπλοκ δοκιμής-catch ή χρησιμοποιώντας τη λέξη-κλειδί ρίψεων.
Στην ιεραρχία εξαίρεσης, η κλάση που κληρονομεί άμεσα την κατηγορία Throwable όπως το IOException, το ClassNotFoundException κ.λπ. ελέγχονται όλα εκτός από τις τάξεις RuntimeException και Error Αυτές είναι μη ελεγμένες εξαιρέσεις.
Το ακόλουθο πρόγραμμα Java δείχνει τις ελεγμένες εξαιρέσεις, το FileNotFoundException και το IOException. Σε αυτό το πρόγραμμα, προσπαθούμε να ανοίξουμε ένα μη υπάρχον αρχείο και να το διαβάσουμε.
Καθώς το αρχείο δεν υπάρχει, η μέθοδος ανοιχτού αρχείου ρίχνει το FileNotFoundException. Στη συνέχεια, όταν προσπαθούμε να διαβάσουμε τα περιεχόμενα του αρχείου και να κλείσουμε το αρχείο, οι μέθοδοι κλήσεων ρίχνουν το IOException.
import java.io.*; class Main { public static void main(String args()) { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Παραγωγή
Στην παραπάνω έξοδο, καθώς ο χειριστής εξαιρέσεων απουσιάζει, λαμβάνουμε σφάλματα συλλογής για ελεγμένες εξαιρέσεις.
Τώρα ας δώσουμε μια ρήτρα ρίψεων για αυτό το πρόγραμμα. Καθώς ο γονέας του FileNotFoundException είναι το IOException, θα καθορίσουμε απλώς το IOException μετά τη ρήτρα ρίψεων.
import java.io.*; class Main { public static void main(String args()) throws IOException { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Παραγωγή
Όπως φαίνεται από την έξοδο, όταν χειριζόμαστε την εξαίρεση, παρέχει πιο ουσιαστική έξοδο αντί για σφάλματα συλλογής.
# 2) Μη ελεγμένη εξαίρεση
Οι μη ελεγμένες εξαιρέσεις είναι οι εξαιρέσεις που ελέγχονται κατά το χρόνο εκτέλεσης. Ως εκ τούτου, παρά τις εξαιρέσεις, μια συλλογή προγραμμάτων θα είναι επιτυχής. Οι περισσότερες από τις μη ελεγμένες εξαιρέσεις απορρίπτονται λόγω των κακών δεδομένων που χρησιμοποιούνται στο πρόγραμμα.
Οι τάξεις που κληρονομούν το 'RuntimeException' είναι μη ελεγμένες εξαιρέσεις. Εξαιρέσεις όπως το ArrayIndexOutofBounds Exception, ArithmeticException, NullPOinterException κ.λπ. είναι παραδείγματα μη ελεγμένων εξαιρέσεων.
Το ακόλουθο πρόγραμμα δείχνει μια ανεξέλεγκτη εξαίρεση χρόνου εκτέλεσης που προκαλείται διαιρώντας έναν αριθμό με μηδέν.
class Main { public static void main(String args()) { int num1=10; int num2=0; //divide both numbers and print the result int result=num1/num2; System.out.println(result); } }
Παραγωγή
Βλέπουμε ότι το πρόγραμμα έχει μεταγλωττιστεί με επιτυχία και στη συνέχεια το ArithmeticException ρίχνεται στο χρόνο εκτέλεσης.
Παραδείγματα μη ελεγμένης εξαίρεσης:
- ArrayIndexOutOfBoundsException
- NullPointerException
- IlegalArgumentException
- NumberFormatException
Εκτός από τις παραπάνω δύο εξαιρέσεις, υπάρχουν μερικές ακόμη εξαιρούμενες ελεγμένες εξαιρέσεις, όπως:
- SQLException
- InvocationTargetExecption
# 3) Λάθος
Το σφάλμα είναι συνήθως μια μη αναστρέψιμη και μη αναστρέψιμη κατάσταση σε ένα πρόγραμμα και όταν παρουσιαστεί σφάλμα, τα προγράμματα διακόπτονται. Μερικά από τα παραδείγματα σφαλμάτων ενός προγράμματος είναι τα OutOfMemoryError, AssertionError και VirtualMachineError κ.λπ.
Η κλάση σφάλματος μεταβιβάζεται από την κατηγορία Throwable. Το σφάλμα περιγράφει μια κατάσταση που δεν μπορεί να αντιμετωπιστεί και οδηγεί σε διακοπή του προγράμματος.
Ας συζητήσουμε το σφάλμα OutOfMemory σε αυτήν την ενότητα ως παράδειγμα σφάλματος.
Γνωρίζουμε ότι όλα τα αντικείμενα στην Java κατανέμονται χρησιμοποιώντας τον νέο χειριστή και αποθηκεύονται στο σωρό. Όταν ο σωρός εξαντληθεί, η Java Virtual Machine (JVM) δεν μπορεί να εκχωρήσει το αντικείμενο. Ταυτόχρονα, ο συλλέκτης απορριμμάτων δεν μπορεί να ελευθερώσει καμία μνήμη. Αυτή η κατάσταση προκαλεί το σφάλμα OutOfMemory.
Το OutOfMemoryError στην Java θα φαίνεται όπως φαίνεται παρακάτω:
'exception in thread 'main' java.lang.outofmemoryerror: java heap space'
Η παρουσία του OutOfMemoryError σε ένα πρόγραμμα σημαίνει ότι είτε υποβάλλονται σε επεξεργασία πάρα πολλά δεδομένα είτε τα αντικείμενα κρατούνται για πολύ καιρό. Μερικές φορές, μπορεί επίσης να είναι μια βιβλιοθήκη τρίτων που εξαντλεί τη μνήμη.
Αιτίες του OutOfMemoryError
# 1) Java Heap Space
Εάν μια εφαρμογή έχει πάρα πολλούς οριστικοποιητές, τότε τα αντικείμενα της κλάσης που έχουν τη μέθοδο οριστικοποίησης δεν ανακτώνται αμέσως από τον συλλέκτη απορριμμάτων, αλλά τίθενται σε ουρά για οριστικοποίηση αργότερα. Μερικές φορές, η οριστικοποίηση δεν μπορεί να συμβαδίσει με το χρόνο και η σωστή μνήμη γεμίζει με αποτέλεσμα το OutOfMemoryError.
Ένας άλλος λόγος για το OutOfMemoryError είναι ότι το καθορισμένο μέγεθος σωρού ενδέχεται να είναι ανεπαρκές για την εφαρμογή.
Ο ακόλουθος κώδικας δείχνει το OutOfMemoryError που μπορεί να προκύψει λόγω ενός τεράστιου μεγέθους δεδομένων που δηλώθηκε για έναν πίνακα.
πώς να ανοίξετε τα αρχεία xml στη λέξη
import java.util.*; public class Main { static List list = new ArrayList(); public static void main(String args()) throws Exception { Integer() array = new Integer(100000 * 100000); } }
Παραγωγή
# 2) Διάστημα Permgen
Η Περιοχή Μόνιμης Δημιουργίας στη μνήμη μπορεί επίσης να εξαντληθεί και θα μπορούσε να δημιουργήσει σφάλμα OutOfMemory.
Το μέγεθος της περιοχής PermGen ορίζεται κατά την έναρξη του JVM. Εάν ο χρήστης δεν ορίσει το μέγεθος, τότε χρησιμοποιείται το προεπιλεγμένο μέγεθος που αφορά συγκεκριμένη πλατφόρμα.
Αν και τα παραπάνω δύο είναι συνήθως οι κύριες αιτίες εμφάνισης OutOfMemoryError, μπορεί να υπάρχουν και άλλες αιτίες όπως το μέγεθος της σειράς που υπερβαίνει το όριο VM κ.λπ.
Λίστα εξαιρέσεων στην Ιάβα
Παρακάτω δίνεται μια λίστα με τις κύριες εξαιρέσεις που συμβαίνουν στην Java. Παρέχουμε παραδείγματα προγραμματισμού για ορισμένες από αυτές τις εξαιρέσεις. Σημειώστε ότι αυτές είναι ενσωματωμένες εξαιρέσεις που υποστηρίζονται από την Java.
#1) ArithmeticException: Οι αριθμητικές ανωμαλίες, όπως η διαίρεση με μηδέν, οδηγούν σε ArithmeticException.
Το παρακάτω πρόγραμμα δείχνει την εμφάνιση του ArithmeticException.
class Main { public static void main(String args()) { try { //define two numbers int num1 = 100, num2 = 0; int result = num1 / num2; // divide by zero //print the result System.out.println('Result = ' + result); } catch (ArithmeticException e) { System.out.println('ArithmeticException:Division by Zero'); } } }
Παραγωγή
# 2) ArrayIndexOutOfBoundsException: Το ArrayIndexOutOfBoundsException ρίχνεται όταν γίνεται πρόσβαση σε ένα στοιχείο πίνακα χρησιμοποιώντας ένα παράνομο ευρετήριο. Το ευρετήριο που χρησιμοποιείται είναι είτε πέρα από το μέγεθος του πίνακα είτε είναι αρνητικό.
# 3) ClassNotFoundException: Εάν δεν βρεθεί ο ορισμός της τάξης, τότε αυξάνεται το ClassNotFoundException.
# 4) FileNotFoundException: Το FileNotFoundException δίνεται όταν το αρχείο δεν υπάρχει ή δεν ανοίγει.
# 5) IOException: Το IOException ρίχνεται όταν η λειτουργία εισόδου-εξόδου αποτύχει ή διακόπτεται.
# 6) InterruptException: Κάθε φορά που ένα νήμα κάνει επεξεργασία ή κοιμάται ή περιμένει, τότε διακόπτεται ρίχνοντας το InterruptException.
# 7) NoSuchFieldException: Εάν μια κλάση δεν περιέχει συγκεκριμένο πεδίο ή μεταβλητή, τότε ρίχνει το NoSuchFieldException.
# 8) NoSuchMethodException: Όταν δεν βρεθεί η μέθοδος πρόσβασης, τότε αυξάνεται το NoSuchMethodException.
# 9) NullPointerException: Το NullPointerException δημιουργείται όταν αναφέρεται ένα μηδενικό αντικείμενο. Αυτή είναι η πιο σημαντική και πιο κοινή εξαίρεση στην Java.
# 10) NumberFormatException: Αυτή η εξαίρεση προκύπτει όταν μια μέθοδος δεν μπορούσε να μετατρέψει μια συμβολοσειρά σε αριθμητική μορφή.
# 11) RuntimeException: Οποιαδήποτε εξαίρεση που εμφανίζεται κατά το χρόνο εκτέλεσης είναι RuntimeException.
# 12) StringIndexOutOfBoundsException: Το StringIndexOutOfBoundsException ρίχνεται από την κλάση String και δείχνει ότι το ευρετήριο είναι πέρα από το μέγεθος του αντικειμένου String ή είναι αρνητικό.
# 13) Εξαίρεση EOF: Το EOFException είναι ένα μέρος του πακέτου java.io και ρίχνεται όταν φτάσει το τέλος του αρχείου και διαβάζεται το αρχείο.
# 14) Παράνομο όρισμα Εξαίρεση: Το IllegalArgumentException απορρίπτεται όταν μεταβιβάζονται στη μέθοδο παράνομα ή μη έγκυρα επιχειρήματα. Για παράδειγμα, τη λανθασμένη μορφή δεδομένων, μηδενική τιμή όταν απαιτείται μη μηδενική ή εκτός ορίσματος ορίσματα.
Το παρακάτω πρόγραμμα Java δείχνει το IllegalArgumentException.
public class Main { int m; public static void setMarks(int marks) public static void main(String() args) { setMarks(45); setMarks(101); } }
Παραγωγή
Στο παραπάνω πρόγραμμα, το IllegalArgumentException ρίχνεται στη δεύτερη λειτουργία κλήσης για setMarks όπου εισάγουμε τα σημάδια που είναι εκτός εμβέλειας (> 45).
# 15) InputMismatchException: Το InputMismatchException ρίχνεται όταν η ένδειξη εισόδου δεν ταιριάζει με ένα καθορισμένο μοτίβο. Για παράδειγμα, Εάν το πρόγραμμα αναμένει ακέραιο και διαβάζει float, τότε το InputMismatchException αυξάνεται.
# 16) NoSuchElementException: Το NoSuchElementException ρίχνεται όταν δεν υπάρχει το επόμενο στοιχείο στο οποίο έχετε πρόσβαση.
Για παράδειγμα, Στην απαρίθμηση, η μέθοδος nextElement () χρησιμοποιείται για την πρόσβαση στο επόμενο στοιχείο στην απαρίθμηση. Εάν το στοιχείο δεν υπάρχει, τότε το NoSuchElementException ρίχνεται. Κυρίως οι Java Συλλογές ρίχνουν αυτήν την εξαίρεση.
Το πρόγραμμα που δίνεται παρακάτω το αποδεικνύει.
import java.util.*; public class Main { public static void main(String() args) { Set hash_Set = new HashSet(); //create an empty hashSet. //This throws NoSuchElementException since hashSet is empty hash_Set.iterator().next(); } }
Παραγωγή
# 17) Ταυτόχρονη τροποποίηση Εξαίρεση: Το ConcurrentModificationException συνήθως απορρίπτεται από τάξεις Συλλογής. Αυτή η εξαίρεση απορρίπτεται όταν τα αντικείμενα προσπαθούν να τροποποιήσουν έναν πόρο ταυτόχρονα.
Για παράδειγμα, ένα νήμα δεν μπορεί να τροποποιήσει μια συλλογή όταν έχει πρόσβαση σε άλλο νήμα. Εάν επιτρέψουμε δύο νήματα, τότε αυτά τα δύο θα έχουν ταυτόχρονα πρόσβαση στη συλλογή και θα υπάρξουν ασυνέπειες.
Το ακόλουθο παράδειγμα δείχνει το ConcurrentModificationException.
import java.awt.List; import java.util.*; public class Main { public static void main(String() args) { ArrayList A_list = new ArrayList<>(); //add elements to the ArrayList A_list.add(10); A_list.add(20); A_list.add(30); Iterator it = A_list.iterator(); while (it.hasNext()) { Integer value = it.next(); System.out.println('ArrayList Value:' + value); if (value.equals(30)) A_list.remove(value); } } }
Παραγωγή
Στο παραπάνω πρόγραμμα, ενώ εκτυπώνεται το ArrayList, προσπαθούμε να διαγράψουμε ένα στοιχείο ταυτόχρονα. Αυτή είναι η ταυτόχρονη πρόσβαση και επομένως ρίχνεται μια εξαίρεση.
Προσαρμοσμένες εξαιρέσεις στην Java
Μέχρι στιγμής έχουμε συζητήσει όλες τις εξαιρέσεις που είναι ενσωματωμένες ή παρέχονται από τη γλώσσα Java. Εκτός από αυτές τις εξαιρέσεις, μπορούμε επίσης να ορίσουμε τις δικές μας εξαιρέσεις. Αυτές ονομάζονται προσαρμοσμένες εξαιρέσεις ή εξαιρέσεις που καθορίζονται από το χρήστη.
Χρησιμοποιώντας προσαρμοσμένες εξαιρέσεις, μπορούμε να ορίσουμε τις εξαιρέσεις μας σύμφωνα με τις ανάγκες μας.
Το παρακάτω παράδειγμα δείχνει την προσαρμοσμένη εξαίρεση που ορίσαμε για μια τιμή ακέραιου.
//custom exception definition class InvalidValueException extends Exception{ InvalidValueException(String s){ super(s); } } class Main{ static void validate(int int_val)throws InvalidValueException{ if(int_val<10) //value is valid if> 10 else throw exception throw new InvalidValueException('Invalid value'); else System.out.println('This is valid integer'); } public static void main(String args()){ try{ validate(9); }catch(Exception m){System.out.println('Exception occured: '+m);} System.out.println('Code after Exception'); } }
Παραγωγή
Συχνές Ερωτήσεις
Ε # 1) Τι εννοείτε με εξαίρεση;
Απάντηση: Ένα συμβάν που συμβαίνει κατά την εκτέλεση ενός προγράμματος και διακόπτει την κανονική ροή εκτέλεσης του προγράμματος ονομάζεται Εξαίρεση. Η εξαίρεση είναι ανεπιθύμητη και απρόσμενη και μπορεί να προκύψει λόγω εξωτερικών παραγόντων ή σφαλμάτων προγραμματισμού.
Q # 2) Ποια είναι η διαφορά μεταξύ Σφάλματος και Εξαίρεσης;
Απάντηση: Εξαιρέσεις είναι συμβάντα που διαταράσσουν την κανονική ροή του προγράμματος. Μπορούμε να χειριστούμε εξαιρέσεις στο πρόγραμμά μας και να συνεχίσουμε το πρόγραμμα κανονικά. Ένα σφάλμα είναι ένα μη ανακτήσιμο συμβάν που δεν μπορεί να αντιμετωπιστεί και τερματίζει το πρόγραμμα.
Q # 3) Τι εννοείτε με το Exception Handling;
Απάντηση: Η διαδικασία καθορισμού της ακολουθίας των βημάτων σε ένα πρόγραμμα για τη διαχείριση της εξαίρεσης ονομάζεται Εξαίρεση χειρισμού. Με την παροχή εξαιρέσεων σε ένα πρόγραμμα, μπορούμε να διασφαλίσουμε την κανονική ροή του προγράμματος.
Q # 4) Ποια είναι τα πλεονεκτήματα του Exception Handling στην Java;
Απάντηση: Χρησιμοποιώντας εξαίρεση χειρισμού μπορούμε να διατηρήσουμε την κανονική ροή εκτέλεσης μιας εφαρμογής. Μπορούμε επίσης να διαδώσουμε τα σφάλματα μέχρι τη στοίβα κλήσεων όταν παρέχουμε χειριστές εξαιρέσεων.
Q # 5) Ποια είναι η χρήση του Exception Handling;
Απάντηση: Ο τερματισμός της κανονικής ροής εκτέλεσης μιας εφαρμογής είναι η κύρια χρήση του να έχετε εξαίρεση χειριστές σε ένα πρόγραμμα. Χωρίς χειριστές εξαιρέσεων, το πρόγραμμα θα τερματιστεί και η κανονική ροή εκτέλεσης θα διακοπεί όταν προκύψει εξαίρεση.
Με την εξαίρεση που χειρίζεται σωστά το πρόγραμμα, μπορεί να συνεχίσει με την κανονική του εκτέλεση ακόμη και όταν υπάρχει εξαίρεση.
Περισσότερα παραδείγματα για εξαιρέσεις
Εξαίρεση είναι ένα συμβάν που συμβαίνει κατά την εκτέλεση του προγράμματος και διακόπτει την εκτέλεση του προγράμματος. Λόγω του οποίου το προϊόν λογισμικού θα τελειώσει απότομα.
Όταν παρουσιαστεί αυτή η εξαίρεση, η Java δημιουργεί ένα αντικείμενο με μήνυμα σφάλματος και πληροφορίες σχετικά με την κλάση. Αυτό είναι το αντικείμενο εξαίρεσης.
Γιατί χρειαζόμαστε μια εξαίρεση στην Java;
Class ExcepDemo χωρίς εξαίρεση:
public class ExcepDemo { public static void main(String() args) { int i=5; int j=0; System.out.println(i/j); System.out.println('statement after division'); } }
ΠΑΡΑΓΩΓΗ:
Class ExcepDemo με Εξαίρεση χειρισμού:
public class ExcepDemo { public static void main(String() args) { // TODO Auto-generated method stub int i=5; int j=0; try { System.out.println(i/j); } catch(ArithmeticException ae) { System.out.println('wrong input'); } System.out.println('statement after division'); } }
ΠΑΡΑΓΩΓΗ:
Δοκιμάστε, πιάστε και τέλος μπλοκάρετε:
- Η εξαίρεση αντιμετωπίζεται από το try, catch block.
- Οι δηλώσεις που μπορούν να οδηγήσουν σε εξαιρέσεις γράφονται στο μπλοκ δοκιμής.
- Όταν προκύψει εξαίρεση, θα εκτελεστούν οι δηλώσεις στο μπλοκ catch. Εάν δεν υπάρξει εξαίρεση, το μπλοκ αλιευμάτων δεν θα εκτελεστεί.
- Ανεξάρτητα από την εξαίρεση που συνέβη ή δεν συνέβη, το τελικό μπλοκ θα εκτελεστεί.
Τύποι εξαίρεσης
Μη ελεγμένη εξαίρεση:
Καθώς οι μη ελεγμένες εξαιρέσεις μπορούν να αποφευχθούν από τον κατάλληλο προγραμματισμό ( Π.χ. Null pointer Exception, Arithmetic Exception) δεν θα έχει ελεγχθεί από τον μεταγλωττιστή. Η εξαίρεση που δεν έχει επιλεγεί θα εμφανιστεί στο χρόνο εκτέλεσης.
Ελεγμένη εξαίρεση:
- Το Checked Exception θα ελεγχθεί από τον μεταγλωττιστή και είναι υποχρεωτικό να ρίξει ή να χειριστεί την εξαίρεση.
- Αυτή η εξαίρεση χρησιμοποιείται για τον διαχωρισμό του κώδικα χειρισμού σφαλμάτων από τον κανονικό κώδικα.
- Όλες οι ελεγμένες εξαιρέσεις ομαδοποιούνται και είναι χρήσιμη στη διαφοροποίηση των προβλημάτων.
Παράδειγμα: java.io
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class DemoExpChecked { public static void main(String() args) { try { File file=new File('input.txt'); BufferedReader br = new BufferedReader(new FileReader(file)) ; String content; while ((content=br.readLine())!=null) { System.out.println(content); } br.close(); } catch(IOException e) { e.printStackTrace(); } } }
Σφάλματα
Μπορεί να προκύψει σφάλμα λόγω λογικών σφαλμάτων προγράμματος ή οποιασδήποτε μνήμης που σχετίζεται με πρόβλημα JVM.
Παράδειγμα: Σφάλμα εκτός μνήμης ή σφάλμα υπερχείλισης στοίβας.
Ρίξτε και ρίχνετε
Η λέξη-κλειδί 'ρίχνει' χρησιμοποιείται για την εξαίρεση, ενώ η λέξη-κλειδί 'ρίχνει' χρησιμοποιείται για να δηλώσει την εξαίρεση.
Παράδειγμα προγράμματος ρίψης:
δωρεάν εφαρμογή λήψης mp3 για τηλέφωνο Android
public class Demothrow { String content ; public void driving(String c) { this.content=c; if (content.isEmpty()) { throw new NullPointerException('content is empty'); } else { System.out.println('content=='+content); } } public static void main(String() args) { Demothrow dt=new Demothrow(); dt.driving(''); } }
Παράδειγμα προγράμματος ρίψεων:
Οι ρίψεις χρησιμοποιούνται για να δώσουν πληροφορίες ότι αυτή η μέθοδος ρίχνει αυτήν τη συγκεκριμένη εξαίρεση. Όταν καλείτε τη συγκεκριμένη μέθοδο, πρέπει να χειριστείτε αυτήν την εξαίρεση.
public class DemoThrows { int i=2,j=0; public void checkmethod () throws ArithmeticException{ System.out.println(i/j); } public static void main(String() args) { DemoThrows d =new DemoThrows(); try { d.checkmethod(); } catch (ArithmeticException ae) { ae.printStackTrace(); } } }
Βασικά σημεία που πρέπει να σημειωθούν:
- Οι εξαιρέσεις είναι μη φυσιολογικά συμβάντα που παρουσιάζονται κατά την εκτέλεση του προγράμματος και θα επηρεάσουν τη ροή εκτέλεσης.
- Ένα σφάλμα διαφέρει από τις εξαιρέσεις. Παράδειγμα σφαλμάτων: Μνήμη από σφάλμα.
- Οι ελεγμένες εξαιρέσεις ελέγχονται κατά τη διάρκεια της σύνταξης και είναι υποχρεωτικό να αντιμετωπιστεί αυτή η ελεγχόμενη εξαίρεση.
- Μια μη ελεγμένη εξαίρεση εμφανίζεται κατά τη διάρκεια του χρόνου εκτέλεσης.
συμπέρασμα
Αυτό το σεμινάριο για τον Εξαίρεση χειρισμού στην Java εισήγαγε τον ορισμό των εξαιρέσεων, του χειρισμού εξαιρέσεων και της ιεραρχίας εξαίρεσης στην Java. Συζητήσαμε επίσης την κλάση εξαίρεσης στην Java που παρέχει διάφορους κατασκευαστές και μεθόδους πρόσβασης σε εξαιρέσεις.
Εξερευνήσαμε μια λίστα με τις κοινές εξαιρέσεις που εμφανίζονται στην Java και είδαμε τα παραδείγματα προγραμματισμού για τη σημαντική εξαίρεση. Συζητήσαμε επίσης τα μεγάλα σφάλματα που παρουσιάζονται σε ένα πρόγραμμα Java μαζί με τους τύπους εξαιρέσεων και προσαρμοσμένων εξαιρέσεων.
=> Ελέγξτε ΟΛΑ τα Εκπαιδευτικά Java εδώ.
Συνιστώμενη ανάγνωση
- Κορυφαίες 10 εξαιρέσεις σεληνίου και πώς να τις χειριστείτε (Ακριβής κωδικός)
- Χειρισμός εξαιρέσεων JDBC - Τρόπος χειρισμού εξαιρέσεων SQL
- Πώς να χειριστείτε την εξαίρεση σε δέσμες ενεργειών SoapUI Groovy - SoapUI Tutorial # 11
- Java String με String Buffer και String Builder Tutorial
- Ανάπτυξη Java: Δημιουργία και εκτέλεση αρχείου Java JAR
- Νήματα Java με μεθόδους και κύκλο ζωής
- Java Virtual Machine: Πώς βοηθά το JVM στην εκτέλεση της εφαρμογής Java
- Πρόσβαση τροποποιητών σε Java - Εκμάθηση με παραδείγματα