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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Generics και η κλάση ArrayList. Εισαγωγή στα Generics

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

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

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

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

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

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

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

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

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

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

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

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

java.lang Class Throwable

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

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

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

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

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

8. Μέθοδοι (Methods)

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

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

Δομημένος Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στη ιαχείριση Εξαιρέσεων Το λογισµικό των βιβλιοθηκών της 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

Ο µηχανισµός 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

Ο µηχανισµός 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

Κλάσεις Εξαιρέσεων (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

Χρήση της µεθόδου 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

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

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

Υπόδειξη: Μια κλάση εξαίρεσης µπορεί να µεταφέρει ένα µήνυµα οποιουδήποτε τύπου Μπορεί να οριστεί ένας constructor µιας κλάσης εξαίρεσης, ο οποίος να δέχεται ως όρισµα άλλου τύπου, εκτός String Θα αποθήκευε την τιµήσεµια instance variable Θα έπρεπε να οριστούν µέθοδοι accessor για αυτήν την instance variable 21

Μια κλάση εξαίρεσης µε µήνυµα τύπουint 22

Χαρακτηριστικά Αντικειµένου Εξαίρεσης Τα δυο σηµαντικότερα χαρακτηριστικά ενός αντικειµένου εξαίρεσης είναι ο τύπος του (δηλ., η κλάση εξαίρεσης) και το µήνυµαπουµεταφέρει Το µήνυµα στέλνεται µε τοαντικείµενο εξαίρεσης ως instance variable Αυτό το µήνυµα µπορεί να ανακτηθεί µε τηνµέθοδο accessor getmessage, έτσι ώστε το µπλοκ catch να µπορεί να αξιοποιήσει το µήνυµα 23

Οδηγίες για κλάσεις εξαιρέσεων ορισµένων από τον προγραµµατιστή Οι κλάσεις εξαιρέσεων µπορεί να είναι ορισµένες από τον προγραµµατιστή, αλλά κάθε τέτοια κλάση πρέπει να είναι παραγόµενη µιας ήδη υπάρχουσας κλάσης εξαίρεσης ΗκλάσηException µπορεί να χρησιµοποιηθεί ως βασική κλάση, εκτός και είναι πιο κατάλληλη κάποια άλλη κλάση εξαίρεσης Πρέπει να ορίζονται τουλάχιστον δυο constructors, µερικές φορές περισσότεροι Η κλάση εξαίρεσης θα πρέπει να επιτρέπει το γεγονός ότι η µέθοδος getmessage κληρονοµείται 24

ιατηρήστε την 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

Παγίδα : Πρώταναχειρίζεστετηνπιο ειδική εξαίρεση Όταν πιάνονται πολλαπλές εξαιρέσεις, η σειρά των δηλώσεων catch είναι σηµαντική Όταν µια εξαίρεση πετάγεται από εάν µπλοκ try, τα catch µπλοκ εξετάζονται µε τη σειρά Το πρώτο που ταιριάζει µε τον τύπο της εξαίρεσης που πετάχτηκε, είναι αυτό που εκτελείται 28

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

Πετώντας µια εξαίρεση µέσα σε µια µέθοδο Μερικές φορές είναι λογικό να πετάµε µια εξαίρεση µέσα σε µια µέθοδο, αλλά να µην τη χειριζόµαστε µέσα στην ίδια µέθοδο Μερικά προγράµµατα που θα χρησιµοποιούσαν τη µέθοδο θα έπρεπε να τερµατίζονται εάν πεταγόταν η εξαίρεση, και µερικά άλλα θα έκαναν κάτι άλλο Σε τέτοιες περιπτώσεις, το πρόγραµµα πουχρησιµοποιεί τη µέθοδο θα πρέπει να περικλείει την ενεργοποίηση της µεθόδου σε µπλοκ try, καιναπιάνειτηνεξαίρεσησεέναµπλοκ catch που έπεται Στην περίπτωση αυτή, η µέθοδος που πετάει την εξαίρεση δεν περιλαµβάνει ούτε µπλοκ try ούτε µπλοκ catch Όµως, θα έπρεπε να περιλαµβάνει µια πρόταση throws 30

ήλωση εξαιρέσεων µε τηνπρόταση 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

Ο κανόνας 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

Εξαιρέσεις στον Κανόνα Catch ή Declare Οι checked exceptions πρέπει να ακολουθούν τον Κανόνα Catch ή Declare Τα προγράµµατασταοποίααυτέςοιεξαιρέσεις µπορεί να πεταχτούν δεν θα µεταγλωττιστούν, παρά µόνο εάν τις χειριστούµε µε τον Κανόνα Οι unchecked exceptions δεν χρειάζεται να συµµορφώνονται µε τον Κανόνα Catch ή Declare 37

Ιεραρχία των αντικειµένων Throwable 38

Ηπρότασηthrows σε παραγόµενες κλάσεις Όταν µια µέθοδος γίνεται override σε µια παραγόµενη κλάση, θα πρέπει να έχει τις ίδιες κλάσεις εξαιρέσεων που παραθέτονται στην πρόταση throws της ίδιας µεθόδου έτσι όπως είναι ορισµένη στη βασική κλάση Ή θα πρέπει να έχει ένα υποσύνολο αυτών Μια παραγόµενη κλάση δεν µπορεί να προσθέσει εξαιρέσεις στην πρόταση throws Αλλά µπορεί να διαγράψει µερικές 39

Τι θα συµβεί εάν δεν χειριστούµε µια εξαίρεση? Εάν κάθε µέθοδος (έως την main και συµπεριλαµβανοµένης της main) απλά περιλαµβάνει µια πρόταση throws για µια εξαίρεση, αυτή η µπορεί να πεταχτεί, αλλά να µην τη χειριστεί καµία µέθοδος Σε ένα πρόγραµµα GUI (δηλ., µε παραθυρικό περιβάλλον), τίποτε δεν συµβαίνει αλλά ο χρήστης µπορεί να µην αντιλαµβάνεται τι έγινε και το πρόγραµµα ναµην είναι πλέον αξιόπιστο Σε non-gui προγράµµατα, αυτή η κατάσταση προκαλεί τον τερµατισµό τουπρογράµµατος µεέναµήνυµα λάθους δίνοντας το όνοµα της κλάσης εξαίρεσης Κάθε ορθά γραµµένο πρόγραµµα θα πρέπει τελικά να χειρίζεται κάθε εξαίρεση µε έναµπλοκ catch σε κάποια µέθοδο 40

Πότε να χρησιµοποιούµε εξαιρέσεις Οι εξαιρέσεις θα πρέπει να χρησιµοποιούνται σε καταστάσεις όπου µια µέθοδος συναντά µια ασυνήθιστη ή µη αναµενόµενη περίπτωση την οποία δεν µπορεί να χειριστεί εύκολα µε κάποιον τρόπο Όταν πρέπει να χρησιµοποιηθεί η διαχείριση εξαιρέσεων, µερικές οδηγίες: Περιλάβετε δηλώσεις throw και παραθέστε τις κλάσεις εξαιρέσεων σε µια πρόταση throws στον ορισµό µιας µεθόδου Τοποθετήστε τα try και catch µπλοκ σε διαφορετική µέθοδο 41

Πότε να χρησιµοποιούµε εξαιρέσεις Ένα παράδειγµα µιας µεθόδου όπου παράγεται µια εξαίρεση: public void somemethod() throws SomeException {... throw new SomeException(SomeArgument);... } 42

Πότε να χρησιµοποιούµε εξαιρέσεις Όταν η 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

Το µπλοκ 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

ιαχείριση εξαιρέσεων µε τηνκλάση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

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

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

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

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