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

Σχετικά έγγραφα
Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

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

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

2.1. Εντολές Σχόλια Τύποι Δεδομένων

2.1 Αντικειµενοστρεφής προγραµµατισµός

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Γενικά (για τις γραπτές εξετάσεις)

Δομές ελέγχου ροής προγράμματος

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

B. Ενσωμάτωση Ιθαγενών Μεθόδων

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

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

3 Αλληλεπίδραση Αντικειμένων

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ηµιουργία ιαλογικών Προγραµµάτων για το Web

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

java.lang Class Throwable

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

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

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version

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

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

2. Προσδιοριστές, δεσμευμένες λέξεις και τύποι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

Εισαγωγή στον Προγ/μό Η/Υ

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Υποστηρικτικό υλικό Σημειώσεις

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Το παρακάτω πρόγραμμα ορίζει δυο κλάσεις την SimpleThread και την TwoThreadsTest:

Κεφάλαιο 1. Νήματα (Threads). Time Sharing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Εισαγωγή στον Προγραμματισμό

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

FAIL PASS PASS οριακά

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Διαδικασιακός Προγραμματισμός

άσκηση Hide UI Elements 7.2 Try and Catch

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

Προγράμματα με δομή Κληρονομικότητας

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Transcript:

6. Εξαιρέσεις στη γλώσσα Java Με το τέλος αυτού του κεφαλαίου θα μπορείτε: Να ορίζετε εξαιρέσεις Να εξηγείτε γιατί είναι σημαντικός ο χειρισμός των εξαιρέσεων Να γράφετε κώδικα για να συλλαμβάνετε εξαιρέσεις Να δημιουργείτε τις δικές σας εξαιρέσεις 6.1 Εξαιρέσεις Τι είναι μία εξαίρεση (exception); Στη Java, η κλάση Exception ορίζει απλές συνθήκες λάθους που μπορεί να συναντήσουν τα προγράμματά σας. Αντί να αφήνετε το πρόγραμμα να τερματιστεί, μπορείτε να γράψετε κώδικα που να χειρίζεται τις εξαιρέσεις και να συνεχίζει την εκτέλεση του προγράμματος. Τι είναι τότε ένα λάθος (error); Στη Java η κλάση Error ορίζει αυτά που θεωρούνται πολύ σοβαρές περιπτώσεις λαθών και από τις οποίες δε θα πρέπει να προσπαθήσετε να επανακάμψετε. Στις περισσότερες περιπτώσεις είναι καλύτερο να αφήσετε το πρόγραμμα να τερματιστεί όταν εμφανιστεί ένα λάθος. Η γλώσσα Java υλοποιεί εξαιρέσεις με τον τρόπο που το κάνει και η C++ ώστε να σας βοηθήσει να δημιουργήσετε καλό κώδικα. Όταν συμβαίνει ένα λάθος στο πρόγραμμά σας ο κώδικας που ανακαλύπτει το λάθος «πετάει» μία εξαίρεση. Με τον τρόπο αυτό σηματοδοτεί προς την τρέχουσα εκτελούμενη διεργασία ότι συνέβη ένα λάθος. Μπορείτε να συλλάβετε την εξαίρεση που πετάχτηκε και στη συνέχεια, αν είναι δυνατό, να επανακάμψετε. java.lang.object java.lang.throwable java.lang.error java.lang.exception 6.2 Παράδειγμα εξαίρεσης Έστω η πιο κάτω επέκταση του προγράμματος HelloWorld.java (η οποία ανακυκλώνεται σε διάφορα μηνύματα): public class HelloWorld { public static void main (String args[]) { int i=0; String greetings[] = {

; Hello world!, No, I mean it!, HELLO WORLD!! while (i < 4) { System.out.println(greetings[i]); i++; 6.3 Χειρισμός εξαίρεσης Κανονικά το πρόγραμμα τερματίζει με μήνυμα λάθους όταν «πετάξετε» μία εξαίρεση, όπως θα κάνει και το πιο πάνω πρόγραμμα μετά από 4 κύκλους: $ java HelloWorld Hello world! No, I mean it! HELLO WORLD!! java.lang.arrayindexoutofboundsexception: 3 at HelloWorld.main(HelloWorld.java:12) Όμως η σημασία του χειρισμού των εξαιρέσεων είναι ότι μπορείτε να γράψετε κώδικα που να συλλαμβάνει τις εξαιρέσεις, να τις χειρίζεται και να συνεχίζει την εκτέλεση του προγράμματος. Η γλώσσα Java έχει διευκολύνσεις που σας επιτρέπουν να καταλάβετε ποια εξαίρεση «πετάχτηκε» και στη συνέχεια να προσπαθήσετε να ανακάμψετε. 6.3.1. Οι εντολές try και catch Για να αντιμετωπίσετε μία συγκεκριμένη εξαίρεση, χρησιμοποιήστε την εντολή try με τον κώδικα που μπορεί να πετάξει την εξαίρεση. Για να συλλάβετε και να δράσετε πάνω στην εξαίρεση που προέκυψε χρησιμοποιήστε την εντολή catch για να καθορίσετε τόσο την εξαίρεση που θα συλλάβετε όσο και τον κώδικα που θα εκτελεστεί αν προκύψει η συγκεκριμένη εξαίρεση. // Κώδικας που μπορεί να προκαλέσει μία συγκεκριμένη εξαίρεση catch (MyExceptionType e) { // Κώδικας που θα εκτελσθεί αν προκύψει η MyExceptionType 6.3.2. Η εντολή finally Η εντολή finally ορίζει ένα τμήμα κώδικα που θέλετε να εκτελείτε πάντα ανεξάρτητα από το αν έχει συλληφθεί ή όχι μία εξαίρεση. Ο επόμενος κώδικας προέρχεται από το βιβλίο Low Level Security in Java του Frank Yellin.

startfaucet(); waterlawn(); finally { stopfaucet(); Η Java εγγυάται ότι θα κλείσει η βρύση, ακόμα και αν συμβεί μία εξαίρεση όταν ανοίγει η βρύση, ή κατά το πότισμα. Ο κώδικας μέσα στα άγκιστρα μετά το try ονομάζεται προστατευόμενος κώδικας. Η μοναδική φορά που η εντολή finally δε θα εκτελεστεί είναι αν εκτελεστεί η μέθοδος System.exit() μέσα στον προστατευόμενο κώδικα. Στην περίπτωση αυτή το πρόγραμμα τερματίζει άμεσα. 6.3.3. Ξανά στο παράδειγμα Το επόμενο παράδειγμα είναι επανάληψη της μεθόδου main(). Η εξαίρεση που παράγεται στην προηγούμενη έκδοση του προγράμματος συλλαμβάνεται και η τιμή του δείκτη του πίνακα γίνεται και πάλι 0. public static void main (String args[]) { int i=0; String greetings[] = { Hello world!, No, I mean it!, HELLO WORLD!! ; while (i < 4) { System.out.println(greetings[i]); catch (ArrayIndexOutOfBoundsException e) { System.out.println( Re-setting Index Value ); i = -1; catch (Exception e) { System.out.println(e.toString()); finally { System.out.println( ); i++; // end while // end main Το μήνυμα που παρουσιάζεται στην οθόνη εναλλάσσεται καθώς εκτελείται ο βρόχος Hello world!

No, I mean it! HELLO WORLD!! Re-setting Index Value 6.3.4. Συνήθεις εξαιρέσεις Η γλώσσα Java παρέχει ορισμένες προκαθορισμένες εξαιρέσεις. Οι επόμενες είναι μερικές από τις πιο συνηθισμένες εξαιρέσεις που μπορεί να συναντήσετε: ArithmeticException Τυπικά το αποτέλεσμα μία διαίρεσης με το μηδέν για ακεραίους o nt i = 12/0; NullPointerException Γίνεται προσπάθεια για προσπέλαση σε ένα αντικείμενο ή μέθοδο πριν αυτό στιγμιοτυπηθεί o Image im [] = new Image[4]; o System.out.println(im[0].toString); NegativeArraySizeException Γίνεται προσπάθεια να δημιουργηθεί ένας πίνακας με αρνητικό μέγεθος ArrayIndexOutOfBoundsException Γίνεται προσπάθεια για προσπέλαση ενός στοιχείου ενός πίνακα πέρα από τον αρχικό ορισμό του μεγέθους του πίνακα SecurityException Συνήθως εμφανίζεται σε ένα browser, όταν η κλάση SecurityManager πετάει μία εξαίρεση για τα applets που προσπαθούν o Να προσπελάσουν ένα τοπικό αρχείο o Να ανοίξουν ένα socket σε υπολογιστή άλλον από αυτόν ο οποίος εξυπηρετεί το applet o Εκτελεί ένα άλλο πρόγραμμα στο περιβάλλον εκτέλεσης 6.4 Κατηγορίες εξαίρεσης Υπάρχουν τρεις μεγάλες κατηγορίες εξαιρέσεων στη Java. Στην πράξη, η Java ορίζει την κλάση java.lang.throwable, η οποία λειτουργεί ως γονική κλάση για όλα τα αντικείμενα που μπορούν να «πετακτούν» και να «συλληφθούν» με χρήση των μηχανισμών διαχείρισης των εξαιρέσεων. Υπάρχουν τρεις σημαντικές υποκλάσεις αυτών, που φαίνονται στο επόμενο διάγραμμα:

Throwable Exception Error RuntimeException Η κλάση Throwable δεν πρέπει να χρησιμοποιείται, αλλά αντί αυτής, μία από τις άλλες τρεις θα περιγράφουν μία συγκεκριμένη εξαίρεση. Στη συνέχεια περιγράφεται ο σκοπός κάθε μίας από αυτές. Η Error δηλώνει ένα σοβαρό πρόβλημα από το οποίο η ανάκαμψη είναι δύσκολη, αν όχι αδύνατη. Ένα παράδειγμα είναι να μην υπάρχει άλλη διαθέσιμη μνήμη. Δεν αναμένεται από ένα πρόγραμμα να μπορεί να αντιμετωπίσει τέτοιου είδους συνθήκες, αν και είναι δυνατό με προσοχή. Η RuntimeException θα πρέπει να χρησιμοποιείται για να δηλώσει ένα πρόβλημα σχεδίασης ή υλοποίησης. Δηλαδή, θα πρέπει να χρησιμοποιείται για να δηλώσει συνθήκες κατά τη φάση της εκτέλεσης που δε θα έπρεπε να συμβούν αν το πρόγραμμα λειτουργούσε σωστά. Αυτό εφαρμόζεται για παράδειγμα σε δείκτες πινάκων που βγαίνουν εκτός ορίων, και στην αναφορά μέσω μίας null μεταβλητής αντικειμένου. Επειδή ένα καλά ορισμένο και υλοποιημένο πρόγραμμα δεν προκαλεί ποτέ αυτού του είδους οι εξαιρέσεις, είναι σύνηθες να μην τις ελέγχουμε. Αυτό έχει ως αποτέλεσμα ένα μήνυμα κατά το χρόνο εκτέλεσης και επιβεβαιώνει ότι θα ληφθεί μέριμνα για τη διόρθωση του σφάλματος, αντί για να το κρύβει ώστε να μη γίνει αντιληπτό. Άλλες εξαιρέσεις δηλώνουν μία δυσκολία κατά το χρόνο εκτέλεσης που μπορεί να εμφανιστεί λόγω επιδράσεων του περιβάλλοντος και μπορούμε να το χειριστούμε. Παραδείγματα περιλαμβάνουν αρχεία που δεν βρίσκονται και URL που δεν έχουν σχηματιστεί ορθά, που αμφότερα θα μπορούσαν να συμβούν αν ο χρήστης έκανε ένα λάθος πληκτρολόγησης. Εφόσον αυτά μπορεί να συμβούν ως αποτέλεσμα ενός λάθους η Java ενθαρρύνει τον προγραμματιστή να τα χειριστεί. 6.5 Ο κανόνας «Δήλωσε ή αντιμετώπισε» Για να ενθαρρύνει τους προγραμματιστές να γράφουν εύρωστο κώδικα η Java απαιτεί από ότι αν μία μέθοδος κάνει μια πράξη η οποία μπορεί να έχει ως αποτέλεσμα μία Exception, διακριτή από Error ή RuntimeException, τότε πρέπει να δώσει ξεκάθαρα τις πράξεις που κάνει όταν συμβεί το πρόβλημα. Υπάρχουν δύο πράγματα που μπορεί να κάνει ο προγραμματιστής για να ικανοποιήσει αυτή την απαίτηση. Ένα μπλοκ catch () { όπου στο catch παρουσιάζονται τα ονόματα οποιασδήποτε υπερκλάσης της εξαίρεσης που «πετάει» ο κώδικας θεωρείται ότι αντιμετωπίζει την κατάσταση, ακόμα και αν ο κώδικας μέσα στο catch είναι κενός.

Εναλλακτικά, μπορείτε να δηλώσετε ότι η εξαίρεση δε χειρίζεται από αυτή τη μέθοδο, και συνεπώς θα την «πετάξει» στη μέθοδο που την κάλεσε. Αυτό γίνεται σημειώνοντας στη δήλωση της μεθόδου την πρόταση throws, ως εξής: public void troublesome() throws IOException Μετά τη δεσμευμένη λέξη throws υπάρχει μία λίστα με όλες τις εξαιρέσεις που μπορεί να προκύψουν μέσα στη μέθοδο, αλλά τις οποίες δε χειρίζεται η μέθοδος. Αν και εδώ παρουσιάζεται μία μόνο εξαίρεση, μπορούμε να χρησιμοποιήσουμε μία λίστα εξαιρέσεων που διαχωρίζονται με κόμμα αν είναι πολλές οι πιθανές εξαιρέσεις που δε χειρίζεται η μέθοδος. 6.6 Δημιουργώντας τις δικές σας εξαιρέσεις Μπορείτε επίσης να δημιουργείτε τις δικές σας εξαιρέσεις ως εξής: public class MyException extends Exception { private String reason; public MyException(String cause) { reason = cause; public String getreason() { return reason; Για να «πετάξετε» μία εξαίρεση που έχετε δημιουργήσει χρησιμοποιείται το πιο κάτω throw new MyException(); 6.6.1. Παράδειγμα Έστω ένα πρόγραμμα εξυπηρέτη-εξυπηρετούμενου (client-server). Στον κώδικα του εξυπηρετούμενου μπορείτε να δοκιμάσετε να συνδεθείτε στον εξυπηρέτη και να περιμένετε να σας απαντήσει μέσα σε πέντε δευτερόλεπτα. Αν ο εξυπηρέτης δεν απαντήσει ο κώδικάς σας μπορεί να «πετάξει» μία εξαίρεση (όπως η ορισμένη από το χρήστη ServerTimedOutException): public void connectme (String servername) throws ServerTimedOutException { int success; int porttoconnect = 80; success = open(servername, porttoconnect); if (success == -1) { throw new ServerTimedOutException(); Για να συλλάβετε την εξαίρεσή σας, χρησιμοποιείτε μία εντολή try public void findserver() {... connectme(defaultserver);

... catch (ServerTimedOutException e) { g.drawstring( Server timed out, trying alternate, 5, 5); connectme(alternateserver); catch (ServerTimedOutException e) { g.drawstring( No server currently available, 5,5); 6.7 Ασκήσεις 6.7.1. Επίπεδο 1: Διαχείριση εξαιρέσεων 1. Χρησιμοποιείστε το παράδειγμα εξαίρεσης για να δημιουργήσετε μία εξαίρεση όταν ο δείκτης του πίνακα βγαίνει έξω από τα όρια του μεγέθους του πίνακα, ή τροποποιήστε ένα δικό σας πρόγραμμα ώστε να προκαλεί μία εξαίρεση. 2. Χρησιμοποιείστε τις try και catch για να ανακάμψετε από την εξαίρεση. 6.7.2. Επίπεδο 3: Δημιουργήστε τη δική σας εξαίρεση 1. Χρησιμοποιώντας την κλάση Bank που δημιουργήσατε στις ασκήσεις του κεφαλαίου 5 και προσθέστε τις πιο κάτω εξαιρέσεις a. AccountOverdrawnException όταν γίνεται προσπάθεια να γίνει ανάληψη περισσότερων χρημάτων από ένα λογαριασμό, από το ποσό που περιέχει ο λογαριασμός b. InvalidDepositException όταν το ποσό προς κατάθεση δεν είναι αποδεκτό (π.χ. είναι αρνητικό)