9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS

Σχετικά έγγραφα
5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

8 ΥΜΒΟΛΟΕΙΡΕ - STRINGS

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

2 ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ. Η πιο απλι μορφι ςφγκριςθσ εντολισ ελζγχου ζχει τθ μορφι : if (<ζπλζήθε>) εληνιή; if(<ζπλζήθε>){ block εληνιώλ; }

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Οντοκεντρικόσ Προγραμματιςμόσ

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

10 ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ ΔΕΔΟΜΕΝΩΝ

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ

6. Εξαιρέσεις στη γλώσσα Java

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

4 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ - for

Αντικειμενοστρεφής Προγραμματισμός

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

Οντοκεντρικόσ Προγραμματιςμόσ

1 ΕΙΣΑΓΩΓΗ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Αντικειμενοστρεφής Προγραμματισμός

Αλγορικμικι & Ρρογραμματιςμόσ με Java

16. Πίνακεσ και Συναρτήςεισ

Εξαιρέσεις (στη Java)

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 10: Exceptions handling (Χειρισμός εξαιρέσεων)

ΟΝΟΜΑΣΟΛΟΓΙΑ ΠΑΡΑΜΕΣΡΩΝ ΓΙΑ ΠΡΟΑΡΜΟΜΕΝΕ ΑΝΑΦΟΡΕ. παραμζτρου> (Εμφανίηεται ςαν Caption ςτθν φόρμα των φίλτρων).

Εξαιρέσεις στη Java. Περιεχόμενα. Κάποιες προκαθορισμένες ρ εξαιρέσεις. Κωστής Σαγώνας

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

Ειδικά Θέματα Προγραμματισμού

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ

Εξαιρέσεις. try, catch, finally, throw, throws

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Οντοκεντρικόσ Προγραμματιςμόσ

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ

ΟΔΗΓΙΕΣ ΔΗΜΙΟΥΡΓΙΑΣ ΚΑΙ ΡΥΘΜΙΣΗΣ ΔΩΡΕΑΝ ΗΛΕΚΤΡΟΝΙΚΟΥ ΤΑΧΥΔΡΟΜΕΙΟΥ ΣΤΟ YAHOO

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

Εξαιρέσεις στην Java EXCEPTIONS IN JAVA

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία

17. Πολυδιάςτατοι πίνακεσ

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Αντικειμενοστραφής Προγραμματισμός

Visual C Express - Οδηγός Χρήσης

Κωστής Σαγώνας Πιάσιμο εξαιρέσεων (catching exceptions) Ρίψη εξαιρέσεων (throwing exceptions) Η πρόταση finally

Εξαιρέσεις (στη Java)

Εξαιρέσεις (στη Java)

Εξαιρέσεις (στη Java) Vincent van Gogh, Irises, 1889

Συντακτικά λάθη, λάθη εκτέλεσης, Λογικά λάθη

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)

Σφςτημα Κεντρικήσ Υποςτήριξησ τησ Πρακτικήσ Άςκηςησ Φοιτητών ΑΕΙ

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 20. Αρχεία. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

Μονάδες 6. Μονάδες ΓΑΨΕ Δεν υπάρχει ρίηα 2. ΑΝ Α>0 ΤΟΤΕ 3. ΤΕΛΟΣ_ΑΝ 4. ΑΛΛΙΩΣ 5. ίηα Τ_(Α)

Οντοκεντρικόσ Προγραμματιςμόσ

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Εξαιρέσεις (στη Java)

TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

ΡΥΘΜΙΕΙ για περιοριςμένο χρήςτη (limited user)

Η γλώςςα προγραμματιςμού C

Δομζσ Δεδομζνων Πίνακεσ

Εισαγωγή Νέου Παγίου

Εφδοξοσ+ Συνδεκείτε ςτθν Εφαρμογι Φοιτθτϊν και μεταβείτε ςτθ ςελίδα «Ανταλλαγι Βιβλίων (Εφδοξοσ+)».

ςυςτιματα γραμμικϊν εξιςϊςεων

Χειρισμός Εξαιρέσεων EXCEPTIONS IN JAVA

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα:

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1

ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΡΤΘΜΙΗ ΔΩΡΕΑΝ ΗΛΕΚΣΡΟΝΙΚΟΤ ΣΑΧΤΔΡΟΜΕΙΟΤ ΣΟ GOOGLE (G-MAIL)

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Σύ ντομος Οδηγο ς χρη σης wikidot για τα projects

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Σμιμα Marketing & Sales

Ιδιότθτεσ πεδίων Γενικζσ.

Ραραμετροποίθςθ ειςαγωγισ δεδομζνων περιόδων

ΕΡΓΑΣΤΗΡΙΑ 1 και 2. Εργαςτήρια Πληροφορική ΙΙ. Ειςαγωγή ςτη Python

Δίκτυα Υπολογιςτϊν 2-Rooftop Networking Project

Εξαιρέσεις (στη Java)

java.lang Class Throwable

Ηλεκτρονικι Υπθρεςία Ολοκλθρωμζνθσ Διαχείριςθσ Συγγραμμάτων και Λοιπϊν Βοθκθμάτων

Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων. 18. Αλφαριθμητικά. Ιωάννθσ Κατάκθσ. ΕΡΛ 032: Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων

Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ

Κλάσεις και Αντικείµενα

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

Transcript:

9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS Με τον όρο Εξαιρζςεισ ( Exceptions ) ςτθ Java χαρακτθρίηουμε τα ςφάλματα που μπορεί να προκφψουν κατά τθν εκτζλεςθ ενόσ προγράμματοσ, όπωσ διαίρεςθ με το μθδζν, προςπάκεια πρόςβαςθσ ςε ςτοιχείο ενόσ πίνακα με τιμι δείκτθ εκτόσ των ορίων που ζχουν δθλωκεί κ.λ.π.. Σε όλεσ τισ Γλϊςςεσ Προγραμματιςμοφ, ςε περίπτωςθ ςφάλματοσ διακόπτεται θ εκτζλεςθ του προγράμματοσ και εμφανίηονται ζνα ι περιςςότερα μθνφματα με πλθροφορίεσ για το είδοσ και το ςθμείο του κϊδικα ςτο οποίο προζκυψε το ςφάλμα. Η Java δίνει τθ δυνατότθτα ςτο χριςτθ να διαχειριςτεί το ςφάλμα που μπορεί να προκφψει, ζτςι ϊςτε το πρόγραμμα να ςυνεχίςει κανονικά τθν εκτζλεςι του. Αυτό γίνεται με το Χειριςτι Εξαιρζςεων, ζνα block εντολϊν, οι οποίεσ καλοφνται όταν προκφψει κάποιο ςφάλμα και το χειρίηονται ανάλογα. Η Java περιζχει μια βιβλιοκικθ χειριςμοφ των πιο ςυνθκιςμζνων ςφαλμάτων, αλλά δίνει και ςτο χριςτθ τθ δυνατότθτα να χειριςτεί τα ςφάλματα με όποιον τρόπο επικυμεί. Οι Εξαιρζςεισ είναι αντικείμενα, οπότε ανικουν ςε κάποια κλάςθ. Οι Εξαιρζςεισ που ενδιαφζρουν τον προγραμματιςτι ( γιατί υπάρχουν και ςφάλματα που αφοροφν τθν εικονικι μθχανι τθσ Java, τα οποία ανικουν ςτθν κλάςθ Error ) είναι τα ςφάλματα που προγράμματοσ, τα οποία ανικουν ςτθν κλάςθ Exception και πιο πολφ αυτά που ςυμβαίνουν κατά το χρόνο εκτζλεςθσ του προγράμματοσ ( Run-Time Exceptions ), τα οποία ανικουν ςτθν κλάςθ RunTimeException. Όλεσ οι εξαιρζςεισ ανικουν ςτθν κλάςθ Throwable., ενϊ οι κλάςεισ Error και Exception είναι υποκλάςεισ τθσ κλαςθσ Throwable και θ κλάςθ RunTimeException είναι υπο-κλάςθ τθσ κλαςθσ Exception όπωσ φαίνεται ςτο επόμενο ςχιμα : Throwable Error Exception RunTimeException Ο Χειριςτισ Εξαιρζςεων περιλαμβάνει τισ παρακάτω εντολζσ - λζξεισ κλειδιά : try : block εντολϊν, ςτο οποίο μπορεί να προκφψει μια εξαίρεςθ. catch : block εντολϊν, οι οποίεσ κα χειριςτοφν τθν εξαίρεςθ, αν προκφψει. finally : προαιρετικό block εντολϊν, οι οποίεσ κα εκτελεςτοφν, οπωςδιποτε, υπάρξει δεν υπάρξει εξαίρεςθ. throws : εντολι, θ οποία προωκεί μια εξαίρεςθ ςτθν καλοφςα μζκοδο να τθ χειριςτεί. Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 1

Ο χειριςμόσ των εξαιρζςεων ζχει τθν παρακάτω μορφι : block εντολϊν, ςτο οποίο μπορεί να προκφψει μια εξαίρεςθ. catch ( <Τύπορ_Εξαίπεζηρ_1> <Ανηικείμενο_Εξαίπεζηρ> ) { block εντολϊν, οι οποίεσ κα χειριςτοφν τθν εξαίρεςθ, αν προκφψει. catch ( <Τύπορ_Εξαίπεζηρ_2> <Ανηικείμενο_Εξαίπεζηρ> ) { block εντολϊν, οι οποίεσ κα χειριςτοφν τθν εξαίρεςθ, αν προκφψει. catch ( <Τύπορ_Εξαίπεζηρ_n> <Ανηικείμενο_Εξαίπεζηρ> ) { block εντολϊν, οι οποίεσ κα χειριςτοφν τθν εξαίρεςθ, αν προκφψει. finally { προαιρετικό block εντολϊν, οι οποίεσ κα εκτελεςτοφν, οπωςδιποτε. 9.1 Παρϊδειγμα Εξαύρεςησ που προκαλεύται ςε εντολό τησ main() Στο επόμενο πρόγραμμα προςπακοφμε να αλλάξουμε το περιεχόμενο τθσ κζςθσ 5 ενόσ πίνακα, ο οποίοσ όμωσ, ςφμφωνα με τθ διλωςι του ( και τθν αρχικοποίθςθ ) περιζχει τισ κζςεισ 0 μζχρι a.length 1 = 4 : package exceptions1; public class Exceptions1 { int a[] = {1,2,3,4,5; //Ππόζβαζη ζε ζηοισείο ηος πίνακα εκηόρ οπίων a[5] = 99; Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at exceptions1.exceptions1.main(exceptions1.java:7) Java Result: 1 BUILD SUCCESSFUL (total time: 1 second) Με το τρζξιμο του προγράμματοσ προκφπτει θ εξαίρεςθ ArrayIndexOutOfBoundsException ςτθ γραμμι 7 τθσ main(), θ οποία ανικει ςτθν κλάςθ Exceptions1, θ οποία ανικει ςτο πακζτο exceptions1 (exceptions1.exceptions1.main). Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 2

9.2 Παρϊδειγμα Εξαύρεςησ ςε εντολό επανϊληψησ τησ main() Στο επόμενο πρόγραμμα προςπακοφμε να εμφανίςουμε το περιεχόμενο των κζςεων 0 μζχρι 5 ενόσ πίνακα, ο οποίοσ όμωσ, ςφμφωνα με τθ διλωςι του ( και τθν αρχικοποίθςθ ) περιζχει τισ κζςεισ 0 μζχρι a.length 1=4, οπότε προκαλείται θ εξαίρεςθ ArrayIndexOutOfBoundsException : package exceptions2; public class Exceptions2 { int a[] = {1,2,3,4,5; //Ππόζβαζη ζε ζηοισείο ηος πίνακα εκηόρ οπίων καηά ηην Εμθάνιζη a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at exceptions2.exceptions2.main(exceptions2.java:7) Java Result: 1 BUILD SUCCESSFUL (total time: 1 second) 9.2.1 Χειριςμόσ τησ Εξαύρεςησ ςε εντολό επανϊληψησ τησ main() Στο προθγοφμενο παράδειγμα θ προςπάκεια πρόςβαςθσ ςτα ςτοιχεία ςτισ κζςεισ i = a.length = 5 και i = a.length + 1 = 6 του πίνακα a εκτόσ των ορίων τθσ διλωςθσ των κζςεων του πίνακα ( 0 μζχρι a.length - 1 ) με τθν εντολι προκαλεί 2 φορζσ τθν εξαίρεςθ ArrayIndexOutOfBoundsException. Για να τθ χειριςτοφμε και να μθν προκλθκεί θ διακοπι τθσ εκτζλεςθσ του προγράμματοσ, γράφουμε τθν εντολι που κα προκαλζςει τθν εξαίρεςθ ςτο block try και τισ εντολζσ χειριςμοφ τθσ εξαίρεςθσ ςτο block catch, ςτο οποίο εμφανίηουμε ζνα αντίςτοιχο μινυμα κακϊσ και το περιεχόμενο του αντικειμζνου τθσ εξαίρεςθσ : package exceptions2a; public class Exceptions2a { int a[] = {1,2,3,4,5; int i; //Εμθάνιζη ζηοισείων πίνακα - //Ππόζβαζη ζε ζηοισείο ηος πίνακα εκηόρ οπίων ζε block try for ( i = 0; i <= a.length + 1; i++ ) Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 3

// Χειπιζμόρ Εξαίπεζηρ - Εμθάνιζη ανηίζηοισος μηνύμαηορ catch (IndexOutOfBoundsException obj){ System.out.println("Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων "); System.out.println("Είδορ Εξαίπεζηρ : " + obj); a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων Δήλωζηρ Είδορ Εξαίπεζηρ : java.lang.arrayindexoutofboundsexception: 5 Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων Δήλωζηρ Είδορ Εξαίπεζηρ : java.lang.arrayindexoutofboundsexception: 6 BUILD SUCCESSFUL (total time: 0 seconds) Παρατιρθςθ Για να χειριςτοφμε ΟΛΕΣ τισ εξαιρζςεισ που μπορεί να ςυμβοφν μζςα ςε μια εντολι επανάλθψθσ, κα πρζπει θ εντολι που πρόκειται να προκαλζςει τθν εξαίρεςθ να ανικει ςτο block try και όχι θ εντολι επανάλθψθσ, θ οποία περιζχει τθν εντολι που πρόκειται να προκαλζςει τθν εξαίρεςθ. 9.3 Παρϊδειγμα Εξαύρεςησ ςε μϋθοδο που καλεύται από τη main() Στο επόμενο πρόγραμμα προςπακοφμε με τθν κλιςθ τθσ μεκόδου displaya() να εμφανίςουμε το περιεχόμενο των κζςεων 0 μζχρι 5 ενόσ πίνακα, ο οποίοσ όμωσ, ςφμφωνα με τθ διλωςι του ( και τθν αρχικοποίθςθ ) περιζχει τισ κζςεισ 0 μζχρι 4, οπότε προκαλείται θ εξαίρεςθ ArrayIndexOutOfBoundsException : package exceptions3method; public class Exceptions3Method { static void displaya(int a[]){ //Εμθάνιζη ζηοισείων πίνακα - //Ππόζβαζη ζε ζηοισείο ηος πίνακα εκηόρ οπίων - Μήνςμα Λάθοςρ int a[] = {1,2,3,4,5; //Κλήζη μεθόδος displaya() displaya(a); Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 4

a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at exceptions3method.exceptions3method.displaya(exceptions3method.java:7) at exceptions3method.exceptions3method.main(exceptions3method.java:14) Java Result: 1 BUILD SUCCESSFUL (total time: 1 second) 9.3.1 Χειριςμόσ τησ Εξαύρεςησ Μϋςα ςτη Μϋθοδο που Προκαλεύται Και ςε αυτό το παράδειγμα θ προςπάκεια πρόςβαςθσ ςτο ςτοιχείο ςτθ κζςθ i = a.length = 5 του πίνακα a εκτόσ των ορίων τθσ διλωςθσ των κζςεων του πίνακα ( 0 μζχρι a.length - 1 ) με τθν εντολι ςτθ μζκοδο displaya() προκαλεί τθν εξαίρεςθ ArrayIndexOutOfBoundsException. Για να τθ χειριςτοφμε και να μθν προκλθκεί θ διακοπι τθσ εκτζλεςθσ του προγράμματοσ, γράφουμε ςτθ μζκοδο displaya() τθν εντολι που κα προκαλζςει τθν εξαίρεςθ ςτο block try και τισ εντολζσ χειριςμοφ τθσ εξαίρεςθσ ςτο block catch, ςτο οποίο εμφανίηουμε ζνα αντίςτοιχο μινυμα : package exceptiions3μethodτry; public class Εxceptiions3ΜethodΤry { static void displayα(int a[]){ //Εμθάνιζη ζηοισείων πίνακα - Χειπιζμόρ Εξαίπεζηρ ζηη μέθοδο catch (IndexOutOfBoundsException obj){ System.out.println("Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων"); int a[] = {1,2,3,4,5; //Κλήζη μεθόδος displayα() displayα(a); Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 5

a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων BUILD SUCCESSFUL (total time: 0 seconds) 9.3.2 Χειριςμόσ τησ Εξαύρεςησ τησ Μεθόδου ςτη main() Και ςε αυτό το παράδειγμα θ προςπάκεια πρόςβαςθσ ςε ςτοιχείο ( i = a.length = 5 ) του πίνακα a εκτόσ των ορίων τθσ διλωςθσ των κζςεων του πίνακα ( 0 μζχρι a.length - 1 ) με τθν εντολι ςτθ μζκοδο displaya() προκαλεί τθν εξαίρεςθ ArrayIndexOutOfBoundsException. Για να τθ χειριςτοφμε και να μθν προκλθκεί θ διακοπι τθσ εκτζλεςθσ του προγράμματοσ, γράφουμε τθν εντολι κλιςθσ τθσ μεκόδου, θ οποία περιζχει τισ εντολζσ που κα προκαλζςουν τθν εξαίρεςθ ςτο block try και τισ εντολζσ χειριςμοφ τθσ εξαίρεςθσ ςτο block catch, ςτο οποίο εμφανίηουμε ζνα αντίςτοιχο μινυμα : package exceptions3methodtrymain; public class Exceptions3MethodTryMain { static void displaya(int a[]){ //Εμθάνιζη ζηοισείων πίνακα - Χειπιζμόρ Εξαίπεζηρ ζηη main int a[] = {1,2,3,4,5; //Χειπιζμόρ Εξαίπεζηρ ζηην Κλήζη ηηρ μεθόδος displaya() displaya(a); catch (IndexOutOfBoundsException obj){ System.out.println("Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων"); a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων BUILD SUCCESSFUL (total time: 0 seconds) Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 6

9.4 Παρϊδειγμα 2 Εξαιρϋςεων ςε εντολό επανϊληψησ τησ main() Στο επόμενο πρόγραμμα προςπακοφμε να εμφανίςουμε το περιεχόμενο των κζςεων 0 μζχρι 5 ενόσ πίνακα δια του αντιςτοίχου δείκτθ i. Η προςπάκεια πρόςβαςθσ ςτο ςτοιχείο ςτθ κζςθ i = a.length = 5 του πίνακα a εκτόσ των ορίων τθσ διλωςθσ των κζςεων του πίνακα ( 0 - a.length - 1 ) προκαλεί τθν εξαίρεςθ ArrayIndexOutOfBoundsException, ενϊ θ διαίρεςθ του ςτοιχείου a[0] δια του i = 0 προκαλεί τθν εξαίρεςθ ArithmeticException, θ οποία προκαλεί και τον τερματιςμό του προγράμματοσ με τθν εκτζλεςθ τθσ πρϊτθσ εντολισ System.out.println() ςτθν εντολι for : package exceptionstwoexceptions; public class ExceptionsTwoExceptions { int a[] = {1,2,3,4,5; //Εμθάνιζη ζηοισείων πίνακα System.out.println("a[" + i + "]/" + i + " = " + (a[i]/i)); Exception in thread "main" java.lang.arithmeticexception: / by zero at exceptionstwoexceptions.exceptionstwoexceptions.main(exceptionstwoexceptions.java:7) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds) 9.4.1 Χειριςμόσ των 2 Εξαιρϋςεων ςτη main() Για να χειριςτοφμε τισ 2 πικανζσ εξαιρζςεισ ( ArithmeticException και ArrayIndexOutOfBoundsException ) που μπορεί να προκφψουν πρζπει να ςυμπεριλάβουμε ςτο πρόγραμμα 2 εντολζσ catch εμφανίηοντασ και το αντίςτοιχο μινυμα : package exeptions2catch; public class Exeptions2Catch { int a[] = {1,2,3,4,5; //Εμθάνιζη ζηοισείων πίνακα - Χειπιζμόρ Εξαίπεζηρ System.out.println("a[" + i + "]/" + i + " = " + (a[i]/i)); catch (ArithmeticException obj){ System.out.println("Διαίπεζη με ηο μηδέν"); catch (ArrayIndexOutOfBoundsException obj){ System.out.println("Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων"); Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 7

Διαίπεζη με ηο μηδέν a[1]/1 = 2 a[2]/2 = 1 a[3]/3 = 1 a[4]/4 = 1 Ππόζβαζη ζε Θέζη Πίνακα Εκηόρ Οπίων BUILD SUCCESSFUL (total time: 1 second) 9.5 Η λϋξη-κλειδύ throws Αν μια μζκοδοσ μπορεί να προκαλζςει μια εξαίρεςθ, τθν οποία δεν μπορεί ι δεν κζλουμε να τθ χειριςτεί θ ίδια θ μζκοδοσ, κα πρζπει να προωκιςει τθν εξαίρεςθ ςτθν καλοφςα μζκοδο με τον όρο throws. Αυτό γίνεται ςτθν υπογραφι τθσ μεκόδου, όπου μετά τθ λίςτα των παραμζτρων γράφεται θ λζξθ throws με τα πικανά είδθ εξαιρζςεων. Ο γενικόσ τφποσ τθσ υπογραφισ τθσ μεκόδου ς αυτι τθν περίπτωςθ είναι : <Τύπορ_Επιζηποθήρ> <Όνομα_Μεθόδος>(Λίζηα_Παπαμέηπων) throws Λίζηα_Εξαιπέζεων 9.5.1 Προώθηςη Εξαύρεςησ μεθόδου ςτην καλούςα μϋθοδο main() Αν κζλουμε να διαβάςουμε ζνα χαρακτιρα ςτθ main() καλϊντασ τθ μζκοδο prompt(), κα πρζπει να προωκιςουμε με το throws τθν εξαίρεςθ ςτθν είςοδο δεδομζνων που μπορεί να προκφψει ςτθ μζκοδο prompt(), ςτθν καλοφςα μζκοδο, τθ main(), όπωσ φαίνεται ςτο επόμενο πρόγραμμα. package exceptionsthrows; public class ExceptionsThrows { public static char prompt() throws java.io.ioexception{ System.out.print("Δώζε ένα σαπακηήπα : "); return (char) System.in.read(); char ch; ch = prompt(); System.out.println("Δώζαηε ηο σαπακηήπα " + ch ); Exception in thread "main" java.lang.runtimeexception: Uncompilable source code - unreported exception java.io.ioexception; must be caught or declared to be thrown at exceptionsthrows.exceptionsthrows.main(exceptionsthrows.java:11) Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds) Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 8

Παρατιρθςθ Το πρόγραμμα εμφανίηει το παραπάνω μινυμα, γιατί ενϊ υπάρχει πικανότθτα να προκλθκεί ςτθ μζκοδο prompt() μια εξαίρεςθ ςτθν είςοδο δεδομζνων (java.io.ioexception), θ μζκοδοσ prompt() τθν προωκεί ςτθ main() με τθν εντολι throws java.io.ioexception, αλλά θ καλοφςα μζκοδοσ δεν τθ χειρίηεται. Ο χειριςμόσ μπορεί να γίνει με 2 τρόπουσ : Να τθν προωκιςει και θ καλοφςα μζκοδοσ. Να τθ χειριςτεί θ καλοφςα μζκοδοσ με τθ χριςθ try catch. 9.5.2 Προώθηςη Εξαύρεςησ μεθόδου και από την καλούςα μϋθοδο main() Tο πρόγραμμα και θ ζξοδοσ κα ζχουν τθν παρακάτω μορφι : Πρόγραμμα package exceptionthrows1; public class ExceptionThrows1 { public static char prompt() throws java.io.ioexception{ System.out.print("Δώζε ένα σαπακηήπα : "); return (char) System.in.read(); public static void main(string[] args) throws java.io.ioexception { char ch; ch = prompt(); // Εμθάνιζη Χαπακηήπα System.out.println("Δώζαηε ηο σαπακηήπα " + ch ); Δώζε ένα σαπακηήπα : q Δώζαηε ηο σαπακηήπα q BUILD SUCCESSFUL (total time: 9 seconds) Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 9

9.5.3 Χειριςμόσ Εξαύρεςησ μεθόδου από την καλούςα μϋθοδο main() Tο πρόγραμμα και θ ζξοδοσ κα ζχουν τθν παρακάτω μορφι : Πρόγραμμα package exceptionthrows2; public class ExceptionThrows2 { public static char prompt() throws java.io.ioexception{ System.out.print("Δώζε ένα σαπακηήπα : "); return (char) System.in.read(); public static void main(string[] args) { char ch; // Έλεγσορ για Πιθανή Εξαίπεζη IOException ch = prompt(); catch (java.io.ioexception obj){ System.out.println("Εξαίπεζη ζε Είζοδο Δεδομένων"); ch = 'a'; // Εμθάνιζη Χαπακηήπα System.out.println("Δώζαηε ηο σαπακηήπα " + ch ); Δώζε ένα σαπακηήπα : q Δώζαηε ηο σαπακηήπα q BUILD SUCCESSFUL (total time: 3 seconds) 9.5.4 Χειριςμόσ Εξαύρεςησ μεθόδου Μϋςα την καλούςα μϋθοδο Σ αυτι τθν περίπτωςθ δε χρειάηεται να προωκιςουμε τθν εξαίρεςθ ςτθν καλοφςα μζκοδο, γιατί τθ χειρίηεται θ ίδια θ μζκοδοσ. Tο πρόγραμμα και θ ζξοδοσ κα ζχουν τθν παρακάτω μορφι : Πρόγραμμα package exceptionthrowstry; public class ExceptionThrowsTry { public static char prompt(){ char ch = 'a'; // Έλεγσορ για Πιθανή Εξαίπεζη IOException System.out.print("Δώζε ένα σαπακηήπα : "); ch = (char) System.in.read(); Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 10

catch (java.io.ioexception obj){ System.out.println("Εξαίπεζη ζε Είζοδο Δεδομένων"); return ch; public static void main(string[] args) { char ch; // Κλήζη Μεθόδος για Διάβαζμα Χαπακηήπα ch = prompt(); // Εμθάνιζη Χαπακηήπα System.out.println("Δώζαηε ηο σαπακηήπα " + ch ); Δώζε ένα σαπακηήπα : q Δώζαηε ηο σαπακηήπα q BUILD SUCCESSFUL (total time: 3 seconds) 9.5.5 Ελεγμϋνεσ και Μη Ελεγμϋνεσ Εξαιρϋςεισ και ο Όροσ throws Οι εξαιρζςεισ που μπορεί να ςυμβοφν κατά τθν εκτζλεςθ ενόσ προγράμματοσ δεν είναι απαραίτθτο να ςυμπεριλαμβάνονται ςτθ λίςτα throws, γιατί θ Java κεωρεί πωσ είναι φυςικό να ςυμβοφν τζτοιου είδουσ εξαιρζςεισ, οπότε δε χρειάηεται να ελεγχκεί, αν ςυμβεί μια τζτοια εξαίρεςθ ςε μια μζκοδο, ι αν κα τθ χειριςτεί και λζγονται μθ ελεγμζνεσ εξαιρζςεισ. Οι πιο ςυνθκιςμζνεσ εξαιρζςεισ αυτοφ του είδουσ είναι : Εξαίρεςθ ArithmeticException ArrayIndexOutOfBoundsException IllegalArgumentException NegativeArraySizeException NumberFormatException Σθμαςία Αρικμθτικό Σφάλμα, όπωσ Διαίρεςθ με μθδζν Δείκτθσ Πίνακα εκτόσ ορίων Λάκοσ παράμετροσ ςτθν κλιςθ μεκόδου Αρνθτικό Μζγεκοσ Πίνακα Λάκοσ μορφι δεδομζνων Υπάρχουν όμωσ και οι ελεγμζνεσ εξαιρζςεισ, όπωσ θ java.io.ioexception που πρζπει να ςυμπεριλαμβάνονται ςτθ λίςτα throws μιασ μεκόδου, αν δεν τισ χειρίηεται θ μζκοδοσ. Αλγορικμικι και Προγραμματιςμόσ Εξαιρζςεισ - Exceptions Γουλιάνασ Κϊςτασ Σελίδα 11