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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

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

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

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

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

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

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

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

Λογισµικό (Software SW) Γλώσσες

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes. ιεπαφές - Interfaces

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

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

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

14. Διαχείριση σφαλμάτων (Exception Handling)

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

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

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

java.lang Class Throwable

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

Τελικό τεστ - απαντήσεις

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Τύποι δεδομένων, τελεστές, μεταβλητές

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

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

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

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 6η: 06/04/2006 1 ιαχείριση Εξαιρέσεων Exception Handling 2 Εισαγωγή στη ιαχείριση Εξαιρέσεων Συνήθωςτοκαλύτεροαποτέλεσµαλαµβάνεται όταν τίποτε ασυνήθιστο δεν συµβαίνει Όµως, πρέπει να είµαστε προετοιµασµένοι για την περίπτωση που συµβούν κατ εξαίρεση συµβάντα Οι µηχανισµοί διαχείρισης εξαιρέσεων στη Java χρησιµοποιούνται όταν η ενεργοποίηση µιας µεθόδου προκαλεί κάτι να συµβεί κατ εξαίρεση 3 1

Εισαγωγή στη ιαχείριση Εξαιρέσεων Το λογισµικό των βιβλιοθηκών της Java (ή ο κώδικας που αναπτύσσεται από τους προγραµµατιστές) παρέχει ένα µηχανισµό πουσηµατοδοτεί όταν συµβείκάτιασυνήθιστο Αυτό αποκαλείται πέταγµα εξαίρεσης (throwing an exception) Σε κάποιο άλλο µέρος του προγράµµατος, ο προγραµµατιστής πρέπει να παρέχει τον κώδικα ο οποίος θα διαχειριστεί την εξαίρεση Αυτό αποκαλείται διαχείριση εξαίρεσης (handling the exception) 4 Ο µηχανισµός try-throw-catch Ο βασικός τρόπος διαχείρισης εξαιρέσεων στην Java αποτελείται από την τριάδα try-throw-catch Το µπλοκ try περιέχει τον κώδικα για τον βασικό αλγόριθµο Μαςλεειτιπρέπειναγίνει, όταν όλα βαίνουν οµαλά Αποκαλείται µπλοκ try επειδή δοκιµάζει "tries" να εκτελέσει την περίπτωση όπου όλα βαίνουν όπως έχουν σχεδιαστεί Μπορεί επίσης να περιέχει κώδικα που πετάει µια εξαίρεση εάν συµβεί κάτι ασυνήθιστο try CodeThatMayThrowAnException 5 Ο µηχανισµός try-throw-catch throw new ExceptionClassName(PossiblySomeArguments); Όταν πετάγεται µια εξαίρεση, η εκτέλεση του περιβάλλοντος try µπλοκ τερµατίζεται Κανονικά, η ροή του ελέγχου µεταφέρεται σε κάποιο άλλο σηµείο του κώδικα, που αναφέρεται ως µπλοκ catch Ητιµή που πετάγεται είναι το όρισµα στοντελεστή throw, καιπάνταείναιένααντικείµενο κάποιας κλάσης εξαιρέσεων (exception class) Η εκτέλεση µιας δήλωσης throw αποκαλείται πέταγµα µιας εξαίρεσης (throwing an exception) 6 2

Ο µηχανισµός try-throw-catch Μια δήλωση throw είναι παρόµοια µε την κλήση µιας µεθόδου: throw new ExceptionClassName(SomeString); Στο παραπάνω παράδειγµα, το αντικείµενο της κλάσης ExceptionClassName δηµιουργείται χρησιµοποιώντας ένα string ως όρισµά του Αυτό το αντικείµενο, το οποίο είναι ένα όρισµα στον τελεστή throw, είναι το αντικείµενο εξαίρεσης που πετάγεται Αντί για την κλήση µιας µεθόδου, µια δήλωση throw καλεί ένα µπλοκ catch 7 Ο µηχανισµός try-throw-catch Όταν πετάγεται µια εξαίρεση, το µπλοκ catch αρχίζει την εκτέλεσή του Το µπλοκ catch έχει µια παράµετρο Το αντικείµενο εξαίρεσης που πετάγεται ενσωµατώνεται ως παράµετρος του µπλοκ catch Η εκτέλεση του µπλοκ catch αποκαλείται πιάσιµο µιας εξαίρεσης (catching the exception), ή διαχείριση της εξαίρεσης (handling the exception) Οποτεδήποτε πετάγεται µια εξαίρεση, θα πρέπει πάντα να πιάνεται από κάποιο µπλοκ catch 8 Ο µηχανισµός try-throw-catch catch(exception e) ExceptionHandlingCode Ένα µπλοκ catch µοιάζει σαν τον ορισµό µιας µεθόδου που έχει µια παράµετρο τύπου Exception Όµως δεν πρόκειται για ορισµό µεθόδου Ένα µπλοκ catch είναι ξεχωριστό κοµµάτι κώδικα που εκτελείται όταν ένα πρόγραµµα συναντήσει και εκτελέσει µια δήλωση throw στο προηγούµενο µπλοκ try Ένα µπλοκ catch συχνά αναφέρεται ως διαχειριστής εξαίρεσης (exception handler) Μπορεί να έχει το πολύ µια παράµετρο 9 3

Ο µηχανισµός try-throw-catch catch(exception e)... Ο προσδιοριστής e στο παραπάνω µπλοκ catch αποκαλείται παράµετρος του µπλοκ catch (catch block parameter) Ηπαράµετρος του µπλοκ catch κάνει δυο πράγµατα: 1. Καθορίζει τον τύπο που αντικειµένου εξαίρεσης που µπορεί να πιαστεί στο µπλοκ catch (π.χ., ένα αντικείµενο της κλάσης Exception στο παραπάνω παράδειγµα) 2. Παρέχει ένα όνοµα (για το αντικείµενο που πιάνεται) πάνω στο οποίο µπορεί να επενεργήσει το µπλοκ catch Σηµείωση: συχνά χρησιµοποιείται ο προσδιοριστής e από σύµβαση, αλλά µπορεί να χρησιµοποιηθεί οποιοσδήποτε non-keyword προσδιοριστής 10 Ο µηχανισµός try-throw-catch Όταν εκτελείται ένα µπλοκ try, δυο πράγµατα µπορεί να συµβούν: 1. εν πετάγεται εξαίρεση στο µπλοκ try Εκτελείται όλος ο κώδικας στο µπλοκ try Το µπλοκ catch παραλείπεται Η εκτέλεση συνεχίζεται µε τον κώδικα που βρίσκεται µετά το µπλοκ catch 11 Ο µηχανισµός try-throw-catch 2. Μια εξαίρεση πετάγεται στο µπλοκ try και πιάνεται στο µπλοκ catch Το υπόλοιπο του κώδικα στο µπλοκ try παραλείπεται Ο έλεγχος µεταφέρεται σε ένα µπλοκ catch που ακολουθεί (στην απλούστερη περίπτωση) Το αντικείµενο που πετάγεται ενσωµατώνεται ως παράµετρος στο µπλοκ catch Εκτελείται ο κώδικας στο µπλοκ catch Εκτελείται ο κώδικας που έπεται του µπλοκ catch (εάν υπάρχει) 12 4

Κλάσεις Εξαιρέσεων (Exception Classes) Υπάρχουν κι άλλες κλάσεις εξαιρέσεων εκτός από την κλάση Exception Μπορούν να οριστούν νέες κλάσεις εξαιρέσεων όπως κάθε άλλη κλάση Όλες οι προκαθορισµένες κλάσεις εξαιρέσεων έχουν τις ακόλουθες ιδιότητες: Υπάρχει ένας constructor που δέχεται ένα µόνο όρισµα τύπου String Η κλάση έχει µια µέθοδο accessor, την getmessage, ηοποίαµπορεί να επιστρέψει το προαναφερθέν string Όλες οι κλάσεις εξαιρέσεων που ορίζονται από τον προγραµµατιστή πρέπει να έχουν τις ίδιες ιδιότητες 13 Κλάσεις Εξαιρέσεων από standard Packages ιάφορες προκαθορισµένες κλάσεις εξαιρέσεων περιλαµβάνονται στα packages που έρχονται µε τη Java Για παράδειγµα: IOException NoSuchMethodException FileNotFoundException Πολλές κλάσεις εξαιρέσεων πρέπει να γίνουν imported, πριν µπορέσουν να χρησιµοποιηθούν import java.io.ioexception; 14 Κλάσεις Εξαιρέσεων από standard Packages Η προκαθορισµένη κλάση εξαίρεσης Exception είναι η ριζική κλάση (root class) για όλες τις εξαιρέσεις Κάθε κλάση εξαίρεσης είναι απόγονος της κλάσης Exception Παρόλο που η κλάση Exception µπορεί να χρησιµοποιηθεί αµέσως σε µια κλάση ή σε ένα πρόγραµµα, συνήθως χρησιµοποιείται για να ορίσουµε µια παραγόµενη κλάση ΗκλάσηException βρίσκεται στο package java.lang, και συνεπώς δεν απαιτείται δήλωση import γιαναγίνειδιαθέσιµη 15 5

Χρήση της µεθόδου getmessage... // method code try... throw new Exception(StringArgument);... catch(exception e) String message = e.getmessage(); System.out.println(message); System.exit(0);... 16 Χρήση της µεθόδου getmessage Κάθε εξαίρεση έχει µια instance variable τύπου String που περιέχει κάποιο µήνυµα Αυτό το string τυπικά προσδιορίζει το λόγο για την εξαίρεση Στο προηγούµενο παράδειγµα, το StringArgument είναι όρισµαστον constructor Exception Αυτό είναι το string που χρησιµοποιείται για την τιµήτηςstring instance variable της εξαίρεσης e Εποµένως, ηκλήσηµεθόδου e.getmessage() επιστρέφει αυτό το string 17 Ορισµός κλάσεων εξαιρέσεων Μια δήλωση throw µπορεί να πετάξει ένα αντικείµενο εξαίρεσης οποιασδήποτε κλάσης εξαίρεσης Αντί για τη χρήση προκαθορισµένων κλάσεων, ο προγραµµατιστής µπορεί να ορίσει τις δικές του κλάσεις εξαιρέσεων Αυτές µπορεί να προσαρµοστούν για να µεταφέρουν το ακριβές είδος πληροφορίας που απαιτείται από το µπλοκ catch Ένας διαφορετικός τύπος εξαίρεσης µπορεί να οριστεί γιανααναγνωρίζεικάθεδιαφορετικήκατάσταση εξαίρεσης 18 6

Ορισµός κλάσεων εξαιρέσεων Κάθεκλάσηεξαίρεσηςπουορίζεταιπρέπειναείναι απόγονος µιας ήδη υπάρχουσας κλάσης εξαίρεσης Μπορεί να είναι µια παραγόµενο κλάση των κλάσεων εξαιρέσεων που υπάρχουν στις βιβλιοθήκες της Java, ή µιας εκ των κλάσεων εξαιρέσεων που ορίστηκαν από τον προγραµµατιστή Οι constructors είναι τα πιο σηµαντικά µέλη στον ορισµό µιαςκλάσηςεξαίρεσης Πρέπει να συµπεριφέρονται ανάλογα σε σχέση µετις µεταβλητές και µεθόδους που κληρονοµούνται από τη βασική κλάση Συχνά, δεν υπάρχουν άλλα µέλη, εκτός απόεκείνα που κληρονοµούνται από τη βασική κλάση Ηεπόµενη κλάση εξαίρεσης The following exception class performs these basic tasks only 19 Προγραµµατιστικά ορισµένη κλάση εξαίρεσης 20 Υπόδειξη: Μια κλάση εξαίρεσης µπορεί να µεταφέρει ένα µήνυµα οποιουδήποτε τύπου Μπορεί να οριστεί ένας constructor µιας κλάσης εξαίρεσης, ο οποίος να δέχεται ως όρισµαάλλου τύπου, εκτός String Θα αποθήκευε την τιµή σεµια instance variable Θα έπρεπε να οριστούν µέθοδοι accessor για αυτήν την instance variable 21 7

Μια κλάση εξαίρεσης µε µήνυµα τύπουint 22 Χαρακτηριστικά Αντικειµένου Εξαίρεσης Τα δυο σηµαντικότερα χαρακτηριστικά ενός αντικειµένου εξαίρεσης είναι ο τύπος του (δηλ., η κλάση εξαίρεσης) και το µήνυµαπουµεταφέρει Το µήνυµα στέλνεταιµετοαντικείµενο εξαίρεσης ως instance variable Αυτό το µήνυµα µπορεί να ανακτηθεί µετηνµέθοδο accessor getmessage, έτσι ώστε το µπλοκ catch να µπορεί να αξιοποιήσει το µήνυµα 23 Οδηγίες για κλάσεις εξαιρέσεων ορισµένων από τον προγραµµατιστή Οι κλάσεις εξαιρέσεων µπορεί να είναι ορισµένες από τον προγραµµατιστή, αλλά κάθε τέτοια κλάση πρέπει να είναι παραγόµενη µιας ήδη υπάρχουσας κλάσης εξαίρεσης ΗκλάσηException µπορεί να χρησιµοποιηθεί ως βασική κλάση, εκτός και είναι πιο κατάλληλη κάποια άλλη κλάση εξαίρεσης Πρέπει να ορίζονται τουλάχιστον δυο constructors, µερικές φορές περισσότεροι Η κλάση εξαίρεσης θα πρέπει να επιτρέπει το γεγονός ότι η µέθοδος getmessage κληρονοµείται 24 8

ιατηρήστε την getmessage Για όλες τις προκαθορισµένες κλάσεις εξαιρέσεων, η µέθοδος getmessage επιστρέφει το string το οποίο περάστηκε ως όρισµαστονconstructor Ήθαεπιστρέψειέναεξ ορισµού string εάν δεν χρησιµοποιήθηκε όρισµα µετονconstructor Αυτήησυµπεριφορά πρέπει να διατηρείται σε όλες τις κλάσεις εξαιρέσεων που ορίζονται από τον προγραµµατιστή Πρέπει να περιλαµβάνεται ένας constructor µεόρισµα τύπου string, τουοποίουτοσώµα ναξεκινάµε κλήση στον super Η κλήση στον super πρέπει να χρησιµοποιεί την παράµετρο ως όρισµα Ένα no-argument constructor πρέπει επίσης να περιλαµβάνεται, που να ξεκινά µε κλήση στον super Αυτή η κλήση στον super πρέπει να χρησιµοποιεί ένα εξ ορισµού string ως όρισµα 25 Πολλαπλά µπλοκ catch Ένα µπλοκ try δύναται να πετάξει οποιοδήποτε αριθµό εξαιρέσεων, ακόµα και διαφορετικών τύπων Σε µια οποιαδήποτε τέτοια εκτέλεση του try, το πολύ µια µόνο εξαίρεση µπορεί να πεταχτεί (αφού µια δήλωση throw τερµατίζει την εκτέλεση του try) Όµως, διαφορετικοί τύποι τιµών εξαιρέσεων µπορεί να πεταχτούν από το try 26 Πολλαπλά µπλοκ catch Κάθε µπλοκ catch µπορείναπιάσειτιµές τέτοιου τύπου κλάσης εξαίρεσης, ώστε να συµφωνούν µε τηνκεφαλίδατουµπλοκ catch ιαφορετικοί τύποι εξαιρέσεων µπορεί να πιαστούν, τοποθετώντας περισσότερα από ένα µπλοκ catch µετά το µπλοκ try Μπορούµεναπεριλάβουµε οποιοδήποτε αριθµό από catch, αλλά πρέπει να τοποθετηθούν στη σωστή σειρά 27 9

Παγίδα : Πρώτα να χειρίζεστε την πιο ειδική εξαίρεση Όταν πιάνονται πολλαπλές εξαιρέσεις, ησειρά των δηλώσεων catch είναι σηµαντική Όταν µια εξαίρεση πετάγεται από εάν µπλοκ try, τα catch µπλοκ εξετάζονται µετησειρά Το πρώτο που ταιριάζει µε τον τύπο της εξαίρεσης που πετάχτηκε, είναι αυτό που εκτελείται 28 Παγίδα : Πρώτα να χειρίζεστε την πιο ειδική εξαίρεση catch (Exception e)... catch (NegativeNumberException e)... Επειδή µια NegativeNumberException είναι τύπου Exception, όλες οι NegativeNumberExceptions θα πιαστούν από το πρώτο µπλοκ catch, πριν φτάσουµε στοδεύτερο Το µπλοκ catch για τις NegativeNumberException δεν θα χρησιµοποιηθεί ποτέ! Για τη σωστή διάταξη, απλά αντιστρέψτε τα δυο µπλοκ catch 29 Πετώντας µια εξαίρεση µέσα σε µια µέθοδο Μερικές φορές είναι λογικό να πετάµε µια εξαίρεση µέσα σε µια µέθοδο, αλλά να µην τη χειριζόµαστε µέσα στην ίδια µέθοδο Μερικά προγράµµατα που θα χρησιµοποιούσαν τη µέθοδο θα έπρεπε να τερµατίζονται εάν πεταγόταν η εξαίρεση, και µερικά άλλα θα έκαναν κάτι άλλο Σε τέτοιες περιπτώσεις, το πρόγραµµα που χρησιµοποιεί τη µέθοδο θα πρέπει να περικλείει την ενεργοποίηση της µεθόδου σε µπλοκ try, και να πιάνει την εξαίρεση σε ένα µπλοκ catch που έπεται Στην περίπτωση αυτή, η µέθοδος που πετάει την εξαίρεση δεν περιλαµβάνει ούτε µπλοκ try ούτε µπλοκ catch Όµως, θα έπρεπε να περιλαµβάνει µια πρόταση throws 30 10

ήλωση εξαιρέσεων µε την πρόταση throws Εάν µια µέθοδος µπορεί να πετάξει µια εξαίρεση, αλλά δεν τη χειρίζεται, πρέπει να παρέχει µια προειδοποίηση Αυτή η προειδοποίηση αποκαλείται πρόταση throws Η διαδικασία συµπερίληψης µιαςκλάσηςεξαίρεσηςσε µια πρόταση clause αποκαλείται δήλωση της εξαίρεσης (declaring the exception) throws AnException //throws clause Το επόµενο δηλώνει ότι µια ενεργοποίηση της µεθόδου amethod θα µπορούσε να πετάξει µια εξαίρεση AnException public void amethod() throws AnException 31 ήλωση εξαιρέσεων µε την πρόταση throws Εάν µια µέθοδος µπορεί να πετάξει περισσότερους από ένα τύπους εξαιρέσεων, τότε διαχωρίζουµετουςτύπουςεξαιρέσεωνµε κόµµα public void amethod() throws AnException, AnotherException Εάν µια µέθοδος πετάει µια εξαίρεση, αλλά δεν τη χειρίζεται η ίδια, τότε η ενεργοποίηση της µεθόδου τερµατίζεται άµεσα 32 ΟκανόναςCatch ή Declare Οι περισσότερες κανονικές εξαιρέσεις που µπορεί να πεταχτούν σε µια µέθοδο, πρέπει να διαχειρίζονται µε ένα από τους δυο τρόπους: 1. Οκώδικαςπουµπορεί να πετάξει την εξαίρεση τοποθετείται µέσα σε ένα try, και η πιθανή εξαίρεση πιάνεται µέσα σε ένα catch µέσα στην ίδια µέθοδο 2. Ηπιθανήεξαίρεσηµπορεί να δηλωθεί στην αρχή του ορισµού της µεθόδου, τοποθετώντας το όνοµα της κλάσης εξαίρεσης σε µια πρόταση throws 33 11

ΟκανόναςCatch ή Declare Η πρώτη τεχνική χειρίζεται µια εξαίρεση µέσα σε ένα µπλοκ catch Η δεύτερη τεχνική είναι ένας τρόπος να µεταθέσουµε την ευθύνη χειρισµού της εξαίρεσης στη µέθοδο που ενεργοποίησε την µέθοδο που πέταξε την εξαίρεση Ηπρώτηµέθοδος πρέπει να χειριστεί την εξαίρεση, εκτός και εάν χρησιµοποιεί την ίδια τεχνική µετάθεσης της ευθύνης χειρισµού της εξαίρεσης Τελικά, κάθε εξαίρεση που πετάγεται θα πιαστεί από ένα µπλοκ catch σε µια µέθοδο που δεν δηλώνει την κλάση εξαίρεσης σε µια πρόταση throws 34 Ο Κανόνας Catch ή Declare Σε κάθε µέθοδο, καιοιδυοτεχνικέςµπορούν να αναµειχθούν Μερικές εξαιρέσεις µπορεί να πιαστούν, και άλλες να δηλωθούν στην πρόταση throws Όµως, αυτέςοιτεχνικέςπρέπειναχρησιµοποιούνται µε συνέπειαµε µια εξαίρεση Εάν µια εξαίρεση δεν δηλώνεται σε µια µέθοδο, πρέπει να την χειρίζεται η ίδια η µέθοδος Εάν µια εξαίρεση δηλώνεται, τότε η ευθύνη χειρισµού της µετατίθεται στην καλούσα µέθοδο Σηµειώστε ότι εάν ο ορισµός µιας µεθόδου περιλαµβάνει µια ενεργοποίηση µιας δεύτερης µεθόδου, και η δεύτερη µέθοδος µπορεί να πετάξει µια εξαίρεση αλλά δεν την πιάνει, τότε η πρώτη µέθοδος πρέπει να τη χειριστεί ή να τη δηλώσει 35 Checked και Unchecked εξαιρέσεις Οι εξαιρέσεις που υπόκεινται σε κανόνες catch ήσε κανόνες declare αποκαλούνται checked exceptions Ο compiler ελέγχει εάν τις διαχειριζόµαστε µε µπλοκ catch block ή µε µια πρόταση throws Οι κλάσεις Throwable, Exception, καιόλοιοι απόγονοι της κλάσης Exception είναι όλες checked exceptions Όλες οι άλλες εξαιρέσεις είναι unchecked exceptions ΗκλάσηError καιόλεςοικλάσειςαπόγονοίτης αποκαλούνται error classes Οι error classes δεν υπόκεινται στον Κανόνα Catch ή Declare 36 12

Εξαιρέσεις στον Κανόνα Catch ή Declare Οι checked exceptions πρέπει να ακολουθούν τον Κανόνα Catch ή Declare Τα προγράµµατα στα οποία αυτές οι εξαιρέσεις µπορεί να πεταχτούν δεν θα µεταγλωττιστούν, παρά µόνο εάν τις χειριστούµε µε τον Κανόνα Οι unchecked exceptions δεν χρειάζεται να συµµορφώνονται µε τονκανόναcatch ή Declare 37 Ιεραρχία των αντικειµένων Throwable 38 Ηπρότασηthrows σε παραγόµενες κλάσεις Όταν µια µέθοδος γίνεται override σε µια παραγόµενη κλάση, θα πρέπει να έχει τις ίδιες κλάσεις εξαιρέσεων που παραθέτονται στην πρόταση throws της ίδιας µεθόδου έτσι όπως είναι ορισµένη στη βασική κλάση Ή θα πρέπει να έχει ένα υποσύνολο αυτών Μια παραγόµενη κλάση δεν µπορεί να προσθέσει εξαιρέσεις στην πρόταση throws Αλλά µπορεί να διαγράψει µερικές 39 13

Τι θα συµβεί εάν δεν χειριστούµε µια εξαίρεση? Εάν κάθε µέθοδος (έως την main και συµπεριλαµβανοµένης της main) απλά περιλαµβάνει µια πρόταση throws για µια εξαίρεση, αυτή η µπορεί να πεταχτεί, αλλά να µην τη χειριστεί καµία µέθοδος Σε ένα πρόγραµµα GUI (δηλ., µε παραθυρικό περιβάλλον), τίποτε δεν συµβαίνει αλλά ο χρήστης µπορεί να µην αντιλαµβάνεται τι έγινε και το πρόγραµµαναµην είναι πλέον αξιόπιστο Σε non-gui προγράµµατα, αυτή η κατάσταση προκαλεί τον τερµατισµό του προγράµµατος µεέναµήνυµα λάθους δίνοντας το όνοµα της κλάσης εξαίρεσης Κάθε ορθά γραµµένο πρόγραµµα θαπρέπειτελικάνα χειρίζεται κάθε εξαίρεση µε έναµπλοκ catch σε κάποια µέθοδο 40 Πότε να χρησιµοποιούµε εξαιρέσεις Οι εξαιρέσεις θα πρέπει να χρησιµοποιούνται σε καταστάσεις όπου µια µέθοδος συναντά µια ασυνήθιστη ή µηαναµενόµενη περίπτωση την οποία δεν µπορεί να χειριστεί εύκολα µεκάποιον τρόπο Όταν πρέπει να χρησιµοποιηθεί η διαχείριση εξαιρέσεων, µερικές οδηγίες: Περιλάβετε δηλώσεις throw και παραθέστε τις κλάσεις εξαιρέσεων σε µια πρόταση throws στον ορισµό µιας µεθόδου Τοποθετήστε τα try και catch µπλοκ σε διαφορετική µέθοδο 41 Πότε να χρησιµοποιούµε εξαιρέσεις Ένα παράδειγµα µιας µεθόδου όπου παράγεται µια εξαίρεση: public void somemethod() throws SomeException... throw new SomeException(SomeArgument);... 42 14

Πότε να χρησιµοποιούµε εξαιρέσεις Όταν η somemethod χρησιµοποιείται από την othermethod, η othermethod πρέπει να χειριστεί την εξαίρεση: public void othermethod() try somemethod();... catch (SomeException e) CodeToHandleException... 43 Παγίδα : Φωλιασµένα µπλοκ try-catch Είναι δυνατό να τοποθετήσουµεέναtry και τα ακόλουθά του catch µπλοκ µέσα σε ένα µεγαλύτερο try, ή µέσασεένα µεγαλύτεροcatch µπλοκ Εάν ένα σύνολο try-catch µπλοκ τοποθετηθούν µέσα σε ένα µεγαλύτερο catch, διαφορετικά ονόµατα πρέπει να χρησιµοποιηθούν για τις παραµέτρους του catch µπλοκ σε εσωτερικό και εξωτερικό µπλοκ Εάν ένα σύνολο try-catch τοποθετηθούν µέσα σε ένα µεγαλύτερο try, και µια εξαίρεση πεταχτεί από το εσωτερικό try η οποία δεν πιαστεί, τότε η εξαίρεση πετάγεται στο εξωτερικό try για επεξεργασία, και µπορεί να πιαστεί σε ένα από τα catch µπλοκ του 44 Το µπλοκ finally Το µπλοκ finally περιέχει κώδικα για να εκτελεστεί, είτε πεταχτεί µια εξαίρεση είτε δεν πεταχτεί από το try µπλοκ Εάν χρησιµοποιηθεί, το µπλοκ finally τοποθετείται µετά το µπλοκ try και τα συνακόλουθα µπλοκ catch try... catch(exceptionclass1 e)...... catch(exceptionclassn e)... finally CodeToBeExecutedInAllCases 45 15

Το µπλοκ finally Εάν το try-catch-finally είναι µέσα στον ορισµό µιας µεθόδου, υπάρχουν τρεις πιθανότητες όταν εκτελεστεί ο κώδικας: 1. Το µπλοκ try εκτελείται ολόκληρο, δεν πετάγεται καµία εξαίρεση, και εκτελείται επίσης και το µπλοκ finally 2. Πετάγεται µια εξαίρεση στο µπλοκ try, πιάνεται σε ένα από τα µπλοκ catch, και εκτελείται επίσης το µπλοκ finally 3. Πετάγεται µια εξαίρεση στο µπλοκ try, δεν υπάρχει µπλοκ catch που να ταιριάζει µέσα στη µέθοδο, εκτελείται το µπλοκ finally, και τερµατίζεται η εκτέλεση της µεθόδου πετώντας το αντικείµενο εξαίρεσης στην καλούσα µέθοδο 46 Ξαναπετώντας µια εξαίρεση Ένα µπλοκ catch µπορείναπεριέχεικώδικα που πετάει µια εξαίρεση Μερικές φορές είναι χρήσιµο ναπιάνουµε µια εξαίρεση και κατόπιν, ανάλογα µετοstring που παράχθηκε από την getmessage, να πετάµε την ίδια ή διαφορετική εξαίρεση για να τη χειριστεί κάποιος άλλος πιο ψηλά στην αλυσίδα διαχείρισης εξαιρέσεων 47 ΗκλάσηAssertionError Όταν ένα πρόγραµµαπεριέχειέναµπλοκ assertion, καιαποτύχειηassertion, πετάγεται ένα αντικείµενο της κλάσης AssertionError Αυτό προκαλεί τον τερµατισµό του προγράµµατος µε ένα µήνυµα λάθους ΗκλάσηAssertionError παράγεται από την κλάση Error, και εποµένως είναι µια unchecked exception Για να αποτρέψουµετοντερµατισµό του προγράµµατος, θα µπορούσαµε να την χειριστούµε, αλλά αυτό δεν είναι απαιτούµενο 48 16

ιαχείριση εξαιρέσεων µε τηνκλάσηscanner Η µέθοδος nextint της κλάσης Scanner µπορεί να χρησιµοποιηθεί για να διαβάσουµε τιµές int από το πληκτρολόγιο Όµως, εάν ο χρήστης εισάγει κάτι διαφορετικό από µια ορθή τιµή int, θα πεταχτεί µια εξαίρεση InputMismatchException Εκτός και εάν χειριστούµετηνεξαίρεσηαυτή, το πρόγραµµα θατερµατιστεί µεέναµήνυµα λάθους Εάν πιάσουµε την εξαίρεση, το µπλοκ catch µπορεί να περιέχει κώδικα για µια εναλλακτική ενέργεια, όπως ερώτηση στο χρήστη να εισαγάγει ξανά τον αριθµό 49 ΗεξαίρεσηInputMismatchException ΗεξαίρεσηInputMismatchException βρίσκεται στο standard Java package java.util Ένα πρόγραµµα που αναφέρεται σε αυτή, θα πρέπει να περιλαµβάνει µια δήλωση import : import java.util.inputmismatchexception; Είναι κλάση απόγονος της κλάσης RuntimeException Εποµένως, είναι µια unchecked exception και δεν απαιτείται να τη χειριστούµε σεέναµπλοκ catch ή να τη δηλώσουµεσεµια πρόταση throws Όµως,επιτρέπεται ο χειρισµός της σε ένα µπλοκ catch, και µερικές φορές είναι χρήσιµος 50 Υπόδειξη : Βρόχοι ελεγχόµενοι από εξαίρεση Μερικές φορές είναι καλύτερο να απλοποιούµετους βρόχους διαµέσου µιας ενέργειας ξανά, όταν πετάγεται µια εξαίρεση, όπως στο παρακάτω παράδειγµα: boolean done = false; while (! done) try CodeThatMayThrowAnException done = true; catch (SomeExceptionClass e) SomeMoreCode 51 17

Βρόχος ελεγχόµενος από εξαίρεση (1/3) 52 Βρόχος ελεγχόµενος από εξαίρεση (2/3) 53 Βρόχος ελεγχόµενος από εξαίρεση (3/3) 54 18

ArrayIndexOutOfBoundsException Μια εξαίρεση ArrayIndexOutOfBoundsException πετάγεται οποτεδήποτε το πρόγραµµα επιχειρείνα χρησιµοποιήσει έναν δείκτη σε πίνακα που βρίσκεται εκτός των ορίων του πίνακα Κανονικά, αυτό προκαλεί τερµατισµό του προγράµµατος Όπως όλοι οι απόγονοι της κλάσης RuntimeException, είναι µια unchecked exception εν υπάρχει απαίτηση να τη χειριστούµε Όταν πετάγεται αυτή η εξαίρεση, είναι µια ένδειξη ότι το πρόγραµµα περιέχεισφάλµα Αντί να επιχειρήσουµεναχειριστούµετηνεξαίρεση, πρέπει να διορθώσουµετοπρόγραµµα 55 19