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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

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

java.lang Class Throwable

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

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

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

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

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

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

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

ΣΕΜΙΝΑΡΙΟ JAVA. 5 η ιάλεξη

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

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

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Είσοδος Έξοδος (Input Output) Εξαιρέσεις (Exceptions)

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

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

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

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

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

ΕΠΛ233 ΕΞΑΙΡΕΣΕΙΣ στη JAVA

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Προγραμματισμός Υπολογιστών με C++

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Α. Ερωτήσεις Ανάπτυξης

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

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

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

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

Εισαγωγή στην πληροφορική

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

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

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Κεφάλαιο 10 ο Υποπρογράµµατα

Βασικά της γλώσσας JAVA

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Διάλεξη 14: Εξαιρέσεις (Exceptions) Διδάσκων: Παναγιώτης Ανδρέου

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Προγραµµατισµός ΙΙ Java 2

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

Οι δείκτες στη γλώσσα C

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

- program p_name(input) - uses crt

Βασικά στοιχεία της Java

Remote Method Invocation (RMI)

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

a = 10; a = k; int a,b,c; a = b = c = 10;

Wrapper Classes, Abstract Classes and Interfaces

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Εφαρµογή EXTRA. ιαδικασία εξαγωγής της Μηχανογραφικής. έκδοσης ισοζυγίου στην εφαρµογή Extra Λογιστική ιαχείριση.

Transcript:

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

Εξαιρέσεις Πολλές φορές όταν προγραµµατίζουµε σε κάποια γλώσσα προγραµµατισµού συµβαίνουν διάφορα σφάλµατα που οφείλονται είτε σε διάφορες αιτίες όπως σε λάθη του προγραµµατιστή, ή σε λάθος δεδοµένα που δώθηκαν είτε από κάποιο χρήστη, είτε διαβάστηκαν από κάποιο αρχείο που περιείχε λάθη, ή σε συσκευές υλικού που δεν ανταποκρίνονται, ή σε συνδέσεις δικτύου που δεν µπορούν να πραγµατοποιηθούν κ.λπ. Στη java χρησιµοποιείται µία οµάδα κλάσεων που ονοµάζονται εξαιρέσεις οι οποίες χειρίζονται κάποιο σφάλµα. Η πρώτη κλάση είναιηthrowable, ηοποίαέχειδύοδευτερεύουσεςκλάσειςτην Error καιτην Exception, κάθεµιααπότιςοποίεςέχειάλλεςυποκλάσεις. Οι κλάσεις που παράγονται από την Error χρησιµοποιούνται για σηµαντικάλάθηόπωςτοναµηνυπάρχειάλληµνήµη ( OutOfMemoryError ) που δεν µπορούµε κατά κανόνα να κάνουµε κάτι γι αυτά. Η κλάση Exception είναι πιο ενδιαφέρουσα δεδοµένου ότιµπορείναπιάσειλάθηκαιναανακάµψειαπόαυτά. Παραδείγµαταυποκλάσεωντης Exception είναιγιαπαράδειγµαοι: ArrayIndexOutOfBoundsException, ArithmeticException, StringIndexOutOfBoundsException, NullPointerException.

Παραδείγµατα εξαιρέσεων κλάση εξαίρεσης

Παραδείγµατα εξαιρέσεων κλάση εξαίρεσης

Εξαίρεση-Αντικείµενο Μια εξαίρεση είναι ένα αντικείµενο. Άλλωστε τα ονόµατα των εξαιρέσεων είναι ονόµατα κλάσεων. Έτσι µια εξαίρεση είναι ένα αντικείµενο της αντίστοιχης κλάσης. Για παράδειγµα η κλάση ArrayIndexOutOfBoundsException. Στα προηγούµενα παραδείγµατα η java δηµιουργεί αυτόµατα ένα αντικείµενο της συγκεκριµένης κλάσης εξαίρεσης και σταµατά την εκτέλεση του προγράµµατος ενώ πετά το αντικείµενό (throws) και τυπώνει ένα µήνυµα λάθους. Κάποιες γνωστές εξαιρέσεις είναι οι ακόλουθες: ArithmeticException παράδειγµα η διαίρεση µε το 0. ArrayIndexOutOfBoundsException πρόσβαση σε στοιχείο πίνακα σε θέση που δεν υπάρχει StringIndexOutOfBoundsException για παράδειγµα αναφορά σε σύµβολοστην 10 η θέσηµιαςσυµβολοσειράςµε 8 θέσεις NullPointerException η εφαρµογή προσπαθεί να χρησιµοποιήσει ένα αντικείµενο που είναι null

Object Οι κλάσεις που παράγονται από την Error χρησιµοποιούνται για σηµαντικά λάθη του συστήµατος απόταοποίαδενµπορούµενα ανακάµψουµε. π.χ. δενυπάρχει άλλη µνήµη Error Throwable Exception. RuntimeException ArrayIndexOutOfBounds Exception ArithmeticE xception StringIndexOutOfBound sexception

Προτάσεις try και catch Για να προστατευθεί ο κώδικας που µπορεί να περιέχει κάποιο σφάλµατονβάζουµεσεέναµπλόκ try. Αν προκληθεί στο συγκεκριµένο κοµµάτι του κώδικα κάποιο σφάλµα η catch τοπιάνεικαιτοχειρίζεται. Ένα κοµµάτι κώδικα σε try και catch αν δηµιουργηθεί εξαίρεση στο try τότε εκτελείται το catch κοµάτι διαφορετικά ο κώδικας δεν µπαίνει µέσα στο catch αλλά συνεχίζει σαν να µην υπήρχε το catch και try. Τοκοµάτιτουκώδικαστο try µπαίνειµέσασεάγγιστρα { }. Η catch είναι περίπου όπως µία µέθοδος δηλαδή ακολουθούν παρενθέσεις και το σώµα σε άγγιστρα. Στην παρένθεση µπαίνει το όνοµα της κλάσης της εξαίρεσης που θα πιαστεί και ακολουθεί το όνοµα µιας µεταβλητής. Μέσα στο catch µπορώ να αναφερθώ στο αντικείµενο αυτό. Ο συνηθέστερος τρόπος χρήσης του αντικειµένου αυτού είναι να κληθεί η µέθοδος getmessage(). Η µέθοδος αυτή υπάρχει σε όλες τις εξαιρέσεις και εµφανίζει ένα λεπτοµερές µήνυµα σφάλµατος.

Παραδείγµατα try catch Το 3 είναιτοπλήθοςτων στοιχείων του πίνακα

Πολλαπλά catch Πολλές φορές στο ίδιο κοµάτι κώδικα χρειάζεται να βάλω πιο πολλές από µία εξαιρέσεις στο catch. Εδώ διακρίνουµε δύο περιπτώσεις: Οι κλάσεις να είναι στην ίδια ιεραρχία. Στην περίπτωση αυτή µπορώ να χρησιµοποιήσω µια υπερκλάση όλων αυτών των κλάσεων που θαήθελαναέχωστο catch. Οι κλάσεις να µην είναι στην ίδια ιεραρχία. Στην περίπτωση αυτή µπορώναχρησιµοποιήσωτόσα catch όσεςκαιοιεξαιρέσεις. Στα παραδείγµατα που ακολουθούν χρησιµοποιούνται είτε πολλά catch είτε ένα catch µιας υπερκλάσης των εξεραίσεων που προκαλούνται από κάθε catch της περίπτωσης των πολλών catch.

Παράδειγµα µε πολλά catch Ανοχρήστηςδώσει 2 τιµές (αντί 3) καιηδεύτερηείναιτο 0 τότεέχωλάθοςκαιστα όριατουπίνακακαιστηδιαίρεσηµετο 0. Όταν έχω πολλά catch εκτελείται το πρώτο που θα βρεθεί και τα άλλα αγνοούνται

Παράδειγµα µε πολλαπλό catch Ανοχρήστηςδώσει 2 τιµές (αντί 3) καιηδεύτερηείναιτο 0 τότεέχωλάθοςκαισταόρια τουπίνακακαιστηδιαίρεσηµετο 0.

Η πρόταση finally Κάποιες φορές είναι απαραίτητο να εκτελεστούν κάποιες ενέργειες στοπρόγραµµαανεξάρτητααπότοτιθασυµβείανπροκληθείήόχι µία εξαίρεση. Τέτοιες περιπτώσεις συνήθως παρουσιάζονται όταν για παράδειγµα θέλουµε να ελευθερωθεί κάποιος εξωτερικός πόρος αφού χρησιµοποιηθεί. Όπως όταν έχουµε ανοίξει κάποιο αρχείο και αυτό θα πρέπει να κλείσει σωστά. Στις περιπτώσεις αυτές χρησιµοποιούµετηνπρόταση finally. try { διάβασµα αρχείου... } catch (εξαίρεσηόνοµαµεταβλητής) { } finally { } χειρισµός σφάλµατος... κλείσιµο αρχείου... Η πρόταση finally µπορεί να χρησιµοποιηθεί χωρίς να υπάρχει η πρόταση catch. Εποµένωςηπρόταση try µπορείναέχει catch προτάσεις, µπορεί να έχει catch προτάσεις και finally πρόταση και τέλος µπορεί να έχει µόνο finally πρόταση. Ένα τέτοιο παράδειγµα δίνεται στη συνέχεια:

Παράδειγµα try finally Αποτέλεσµα 0 10 17 13 29 38 2 25 ** 120 112 15 19 24 20 30 12 ** 106 25 125 69 176 **

Object Implicit Exceptions Error Throwable Exception Explicit Exceptions. RuntimeException ArrayIndexOutOf BoundsException Arithmetic Exception StringIndexOutOf BoundsException

ήλωση εξαίρεσης σε µέθοδο Οι περισσότερες εξαιρέσεις εγείρονται αυτόµατα από το περιβάλλον της γλώσσας (implicit exceptions). Τις explicit εξαιρέσεις τις προκαλούν οι µεθοδοί µας. Για να δηλώσουµε πως η µέθοδός µας µπορεί να προκαλέσει µία ή περισσότερες εξαιρέσεις χρησιµοποιούµε τη λέξη κλειδί throws και ακολουθούν τα ονόµατα των εξαιρέσεων χωρισµένα µε κόµατα. Ο τρόπος που δηλώνεται αυτό είναι: τροποποιητές τύπος επιστροφής όνοµα µεθόδου (λίστα παραµέτρων) throws όνοµα εξαίρεσης 1, όνοµα εξαίρεσης 2,... { σώµα της µεθόδου } Για παράδειγµα: public int mymethodos (int a, int b) throws NumberFormatException, EOFException {... κυρίως σώµα της µεθόδου... } Όπως ακριβώς συµβαίνει µε την catch υπάρχει η δυνατότητα όταν στη λίστα των ονοµάτων των εξαιρέσεων υπάρχουν κάποιες που έχουν κοινή υπερκλάση να χρησιµοποιηθεί το όνοµα της υπερκλάσης αντί των πολλών ονοµάτων των υποκλάσεων

Πρόκληση(έγερση) εξαίρεσης Αν σε µια µέθοδο δηλωθεί πως προκαλεί εξαίρεση τότε µπορεί να συµβούν τα εξής: Η µέθοδος προκαλεί η ίδια εξαίρεση χρησιµοποιώντας την λέξη κλειδί throw στο σώµα της (άµεση πρόκληση) Για παράδειγµα: Exception nea = new Exception( ); throw nea; Εποµένως στο σώµα της µεθόδου έχουµε public methodos (παράµετροι) throws Exception{ throw new Exception( ); } ή throw new Exception( ); Καλεί στο σώµα της µέθοδο η οποία προκαλεί εξαίρεση την οποία όµως δεν χειρίζεται η ίδια αλλά η καλούσα (έµµεση πρόκληση) Για παράδειγµα: public methodos(παράµετροι) throws MalformedURLException { } Όποια µέθοδος καλέσει την methodos θα πρέπει να προκαλέσει την εξαίρεση

ηµιουργία Εξαιρέσεων από τον χρήστη Για να δηµιουργήσει κάποιος χρήστης τις δικές του εξαιρέσεις πρέπειναλάβειυπόψητουταεξής: Η νέα εξαίρεση θα πρέπει να είναι υποκλάση της κλάσεως Exception ή κάποιας από τις υποκλάσεις της Οικλάσειςεξαιρέσεωνέχουνσυνήθωςδύοµεθόδουςδηµιουργούς. Οέναςδενθαέχειόρισµακαιοάλλοςθαέχεισανόρισµαµια συµβολοσειρά Η συµβολοσειρά θα πρέπει να χρησιµοποιηθεί στη σωστή θέση µέσα στην εξαίρεση και γι αυτό καλούµε την super µε παράµετρο την συµβολοσειρά Για παράδειγµα public class NewException extends Exception { } public NewException( ){ } public NewException( ) (String message) { } super (message);