how handle arrayindexoutofboundsexception java
Αυτό το σεμινάριο παρέχει μια λεπτομερή εξήγηση σχετικά με μια σημαντική εξαίρεση που ρίχνεται από Java Arrays, δηλαδή ArrayIndexOutOfBoundsException με απλά παραδείγματα:
Έχουμε μάθει τα πάντα για το Arrays στα προηγούμενα μαθήματά μας. Οι πίνακες έχουν στατικό χαρακτήρα και η διάσταση ή το μέγεθός της καθορίζεται κατά τη στιγμή της δήλωσής τους. Γνωρίζουμε επίσης ότι αυτό το μέγεθος ή ο αριθμός των στοιχείων που δηλώθηκαν για τον πίνακα είναι σταθερά και αριθμούνται από το 0.
Μερικές φορές, η λογική του προγράμματος είναι τέτοια που το πρόγραμμα προσπαθεί να αποκτήσει πρόσβαση στο στοιχείο από ένα μη υπάρχον ευρετήριο. Για παράδειγμα, Λόγω δυσλειτουργιών σε ένα πρόγραμμα, ένα πρόγραμμα μπορεί να προσπαθήσει να αποκτήσει πρόσβαση στο 11ουστοιχείο στη σειρά 10 στοιχείων. Αυτό οδηγεί σε ανώμαλη κατάσταση.
=> Δείτε την πλήρη εκπαίδευση Java για αρχάριους
καλύτερο λογισμικό για τη δημιουργία διαγραμμάτων ροής
Η Java παρέχει μια εξαίρεση στο πακέτο «java.lang» που ρίχνεται όταν γίνεται πρόσβαση σε ένα μη υπάρχον ευρετήριο πίνακα. Αυτό είναι γνωστό ως 'ArrayIndexOutOfBoundsException'.
Τι θα μάθετε:
ArrayIndexOutOfBoundsException
Όπως ήδη αναφέρθηκε, όταν προσπαθείτε να αποκτήσετε πρόσβαση σε στοιχεία πίνακα πέραν ενός καθορισμένου μήκους ή αρνητικού ευρετηρίου, ο μεταγλωττιστής ρίχνει το 'ArrayIndexOutOfBoundsException'.
Το ArrayIndexOutOfBoundsException εφαρμόζει μια «σειριοποιήσιμη» διεπαφή και προέρχεται από το «indexOutOfBoundsException» που με τη σειρά του προέρχεται από την κλάση RuntimeException που είναι μια υποκατηγορία της κατηγορίας «εξαίρεση». Όλα αυτά τα μαθήματα ανήκουν στο πακέτο «java.lang».
Το ArrayIndexOutOfBoundsException είναι ένας χρόνος εκτέλεσης, ανεξέλεγκτη εξαίρεση και επομένως δεν χρειάζεται να καλείται ρητά από μια μέθοδο. Ακολουθεί το διάγραμμα τάξης του ArrayIndexOutOfBoundsException που δείχνει την ιεραρχία κληρονομιάς καθώς και τους κατασκευαστές αυτής της εξαίρεσης.
Διάγραμμα κλάσης του ArrayIndexOutOfBoundsException
Όπως εξηγήθηκε νωρίτερα, η κατηγορία ArrayIndexOutOfBoundsException έχει τρία superclasses, δηλ. Java.lang.exception, java.lang. runtimeException και java.lang.indexOutOfBoundsException.
Στη συνέχεια, θα δούμε μερικά παραδείγματα του ArrayIndexOutOfBoundsException στο java.
Παράδειγμα εξαίρεσης ArrayIndexOutOfBounds
Ας δούμε το πρώτο παράδειγμα που δείχνει την εξαίρεση του ArrayIndexOutOfBounds.
class Main { public static void main(String() args) { //array of subjects. There are 5 elements. String() subjects = {'Maths','Science','French','Sanskrit', 'English'}; //for loop iterates from 0 to 5 (length of array) for(int i=0;i<=subjects.length;i++) { //when ‘i’ reaches 5, it becomes invalid index and exception will be thrown System.out.print(subjects(i) + ' '); } }
Παραγωγή:
Στο παραπάνω πρόγραμμα, έχουμε θέματα που αποτελούνται από 5 στοιχεία. Ωστόσο, στο loop for, έχουμε ορίσει την κατάσταση επανάληψης ως i<=subjects.length. Thus for the last iteration, the value of i is 5 which exceeds the array size. Hence, when printing array elements, the iteration i=5, results in ArrayIndexOutOfBoundsException being thrown.
Δίνεται παρακάτω ένα άλλο παράδειγμα πρόσβασης στον αρνητικό δείκτη.
class Main { public static void main(String() args) { //array of integers Integer() intArray = {10,20,30,40,50}; //index = 0; accessing element is successful System.out.println('First element: ' + intArray(0)); //index = -4; accessing fails. Exception thrown System.out.println('Last element: ' + intArray(-4)); }
Παραγωγή:
Στο παραπάνω πρόγραμμα, δηλώνουμε έναν πίνακα ακέραιου τύπου και μετά έχουμε πρόσβαση στα στοιχεία χρησιμοποιώντας μεμονωμένους δείκτες. Η πρώτη έκφραση είναι έγκυρη, αλλά στη δεύτερη έκφραση, προσπαθήσαμε να αποκτήσουμε πρόσβαση στο στοιχείο στο ευρετήριο = -4. Εξ ου και η δεύτερη έκφραση ρίχνει το ArrayIndexOutOfBoundsException όπως φαίνεται στην έξοδο.
Αποφυγή του ArrayIndexOutOfBoundsException
Η κοινή αιτία για την εμφάνιση του ArrayIndexOutOfBoundsException είναι ότι ο προγραμματιστής κάνει λάθος στη χρήση των δεικτών του πίνακα.
Έτσι, ο προγραμματιστής μπορεί να ακολουθήσει τις παρακάτω τεχνικές για να αποφύγει την εμφάνιση του ArrayIndexOutOfBoundsException.
πώς να δημιουργήσετε μια νέα λίστα στο java
Χρησιμοποιήστε τους κατάλληλους δείκτες έναρξης και λήξης
Οι συστοιχίες ξεκινούν πάντα με το ευρετήριο 0 και όχι 1. Ομοίως, η πρόσβαση στο τελευταίο στοιχείο στον πίνακα μπορεί να χρησιμοποιηθεί χρησιμοποιώντας το ευρετήριο «μήκος πίνακα-1» και όχι το «μήκος πίνακα». Οι προγραμματιστές πρέπει να είναι προσεκτικοί κατά τη χρήση των ορίων του πίνακα και έτσι να αποφεύγουν το ArrayIndexOutOfBoundsException.
Χρήση βελτιωμένου για βρόχο
Ένα βελτιωμένο για βρόχο ή για κάθε βρόχο επαναλαμβάνεται σε γειτονικές θέσεις μνήμης όπως συστοιχίες και έχει πρόσβαση μόνο στους νόμιμους δείκτες. Ως εκ τούτου, όταν χρησιμοποιείται βελτιωμένη για βρόχο, δεν χρειάζεται να ανησυχούμε για την πρόσβαση σε λάθος ή παράνομους δείκτες.
Παράδειγμα επανάληψης ενός πίνακα χρησιμοποιώντας το Enhanced for Loop.
class Main { public static void main(String() args) { //array of subjects. There are 5 elements. String() subjects = {'Maths','Science','French','Sanskrit', 'English'}; System.out.println('') //define enhanced for loop to iterate over array for(String strval:subjects) { //iterates only through valid indices System.out.print(strval + ' '); } } }
Παραγωγή:
Έχουμε χρησιμοποιήσει ένα βελτιωμένο για βρόχο στο παραπάνω πρόγραμμα για να επαναλάβουμε τη σειρά θεμάτων. Σημειώστε ότι για αυτόν τον βρόχο, δεν χρειάζεται να προσδιορίσουμε το ευρετήριο ρητά. Εξ ου και ο βρόχος επαναλαμβάνεται πάνω από τον πίνακα μέχρι να επιτευχθεί το τέλος του πίνακα.
Έτσι, είναι εύκολο να διορθώσετε το ArrayOutOfBoundsException χρησιμοποιώντας κατάλληλους δείκτες και προσέχοντας όταν καθορίζετε τα όρια του πίνακα. Μπορούμε επίσης να χρησιμοποιήσουμε το βελτιωμένο για βρόχο για να επαναλάβει τις συστοιχίες.
Ας προχωρήσουμε για να απαντήσουμε σε μερικές συχνές ερωτήσεις σχετικά με εξαιρέσεις σε πίνακες.
Συχνές Ερωτήσεις
Ε # 1) Γιατί συμβαίνει το ArrayIndexOutOfBoundsException;
Απάντηση: Το ArrayIndexOutOfBoundsException παρουσιάζεται όταν προσπαθείτε να αποκτήσετε πρόσβαση σε ένα ευρετήριο πίνακα που δεν υπάρχει π.χ. ο δείκτης είναι είτε αρνητικός είτε εκτός ορίων με τα όρια του πίνακα.
Q # 2) Τι είναι το NegativeArraySizeException;
Απάντηση: Το NegativeArraySizeException είναι μια εξαίρεση χρόνου εκτέλεσης που ρίχνεται εάν ο πίνακας έχει οριστεί με αρνητικό μέγεθος.
Q # 3) Τι είναι η εξαίρεση από τον πίνακα;
Απάντηση: Ένας πίνακας εκτός ορίου εξαίρεσης εμφανίζεται όταν ένα πρόγραμμα προσπαθεί να αποκτήσει πρόσβαση σε ένα στοιχείο πίνακα καθορίζοντας ένα αρνητικό ευρετήριο ή ένα ευρετήριο που δεν βρίσκεται στην περιοχή του καθορισμένου πίνακα.
Q # 4) Μπορούμε να ρίξουμε το NullPointerException στην Java;
Απάντηση: Ναι, μπορείτε να ρίξετε το NullPointerException στην Java ή αλλιώς το JVM θα το κάνει για εσάς.
Ε # 5) Έχει ελεγχθεί ή δεν είναι επιλεγμένο το NullPointerException;
Απάντηση: Το NullPointerException δεν είναι επιλεγμένο και επεκτείνει το RuntimeException. Δεν υποχρεώνει τον προγραμματιστή να χρησιμοποιήσει το μπλοκ catch για να το χειριστεί.
συμπέρασμα
Σε αυτό το σεμινάριο, συζητήσαμε τις λεπτομέρειες του ArrayIndexOutOfBoundsException στην Java. Αυτή η εξαίρεση συνήθως απορρίπτεται όταν σε ένα πρόγραμμα προσπαθούμε να προσπελάσουμε τα στοιχεία του πίνακα χρησιμοποιώντας το αρνητικό ευρετήριο ή το δείκτη εκτός ορίων, όπως ο καθορισμός ενός ευρετηρίου που είναι μεγαλύτερο από το καθορισμένο μήκος του πίνακα.
Αυτή η εξαίρεση μπορεί να αποφευχθεί με τη φροντίδα των δεικτών κατά την πρόσβαση στις συστοιχίες ή με τη χρήση ενισχυμένου για βρόχο που από το σχεδιασμό έχει πρόσβαση μόνο σε νόμιμους δείκτες.
Θα προχωρήσουμε σε άλλα θέματα συστοιχίας στα επόμενα σεμινάρια μας.
=> Εξερευνήστε το ΔΩΡΕΑΝ μάθημα Java εδώ.
Συνιστώμενη ανάγνωση
- Εκμάθηση Java Reflection με παραδείγματα
- Εκμάθηση μήκους σειράς Java με παραδείγματα κώδικα
- Εξαιρέσεις Java και χειρισμός εξαιρέσεων με παραδείγματα
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Πρόσβαση τροποποιητών σε Java - Εκμάθηση με παραδείγματα
- Java Array - Πώς να εκτυπώσετε στοιχεία ενός πίνακα στην Java;
- Εισαγωγή στη γλώσσα προγραμματισμού Java - Video Tutorial
- Εκμάθηση Java SWING: Container, Components and Event Handling