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

Σχετικά έγγραφα
Εξαιρέσεις στην Java EXCEPTIONS IN JAVA

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός (lect 1) ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA. Μαρία Ρήγκου

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

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

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

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

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

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

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

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

java.lang Class Throwable

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΗΥ252 Πρόοδος 24 Νοεμβρίου 2012 Σελίδα 2 από 8

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

Διάλεξη Εισαγωγή στη Java, Μέρος B

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

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

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

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

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

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

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

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

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

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

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

public class ArrayStack implements Stack {

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

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

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

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

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS. Διαχείριση Δικτύων. Nikolas Bompetsis

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

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

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

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

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

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

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

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

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

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

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

11β Δομικά πρότυπα σχεδίασης

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

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

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

Transcript:

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

Τι είναι μια εξαίρεση Έστω το κάτωθι τμήμα κώδικα: int age = Integer.parseInt(input); Προφανώς αναμένουμε έναν αριθμό (ακέραιο) από το χρήστη που αντιπροσωπεύει μια έγκυρη τιμή ηλικίας Θεωρήστε ωστόσο τις παρακάτω πιθανότητες: 1. Αν ο χρήστης πληκτρολογήσει ένα $ αντί του 4? 2. Αν ο χρήστης εισάγει ένα δεκαδικό ψηφίο? 3. Αν κρατήσει πατημένο το πλήκτρο 3 για πολύ και εισαχθεί ένας πολύ μεγάλος αριθμός? Δεν αναμένουμε συνθήκες όπως αυτές Ωστόσο συμβαίνουν!! 2

Τι είναι μια εξαίρεση Ορισμένα πράγματα μπορεί να εξελιχθούν με λάθος τρόπο κατά τη διάρκεια της εκτέλεσης και δεν μπορούν να ανιχνευθούν κατά τη διάρκεια της μεταγλώττισης Ένα άλλο παράδειγμα: απόπειρα διαίρεσης με το 0 Από την πλευρά του compiler δεν υπάρχει κανένα πρόβλημα με τις αντίστοιχες εντολές και τα προβλήματα θα προκύψουν μόνο κατά την εκτέλεση του προγράμματος Στο σημείο αυτό «ενεργοποιείται ένας συναγερμός» και η Java προσπαθεί να «παράγει μια εξαίρεση» υποδηλώνοντας ότι κάτι αντικανονικό έχει συμβεί. 3

Παράδειγμα import java.util.*; public class StackDemo { public static void main(string args[]) { // creating stack Stack st = new Stack(); // populating stack st.push("java"); st.push("source"); // removing top object System.out.println("Removed object is: "+st.pop()); // elements after remove System.out.println("Elements after remove: "+st); 4

Παράδειγμα import java.util.*; public class StackDemo { public static void main(string args[]) { // creating stack Stack st = new Stack(); // populating stack st.push("java"); st.push("source"); // removing top object System.out.println("Removed object is: "+st.pop()); st.pop(); st.pop(); // elements after remove System.out.println("Elements after remove: "+st); 5

Ορολογία: Actors και Actions Operation - Λειτουργία Μια μέθοδος που μπορεί να παράγει (raise) μια εξαίρεση. Invoker Μια μέθοδος που καλεί λειτουργίες και χειρίζεται τις εξαιρέσεις που προκύπτουν. Exception Μια ακριβής και πλήρης περιγραφή ενός αντικανονικού γεγονότος. Πρόκειται για αντικείμενα στη Java. Raise (Παραγωγή Εξαίρεσης) Αποστολή μιας εξαίρεσης από την operation στον invoker. (Καλείται throw στην Java). Ένας άλλος συνηθισμένος όρος είναι το emit. Handle - Χειρισμός Η απόκριση του Invoker στην εξαίρεση, καλείται catch στη Java. Backtrack Η δυνατότητα επαναφοράς των πλαισίων στοίβας στο σημείο όπου παρήχθη η εξαίρεση στο πρώτο κατάλληλο χειριστή 6

Ορισμένοι τύποι εξαιρέσεων Arithmetic Exception NullPointerException πρόβλημα κατά την αποτίμηση αριθμητικής παράστασης, όπως η διαίρεση με το μηδέν κλήση μεθόδου δια μέσου αναφοράς που έχει τιμή null IndexOutOfBoundsException ένας δείκτης πίνακα έχει βρεθεί εκτός των ορίων της δομής EOFException εντοπίστηκε σύμβολο τέλους αρχείου 7

Εξαιρέσεις Ένα πρόγραμμα μπορεί να αντιμετωπίσει μια εξαίρεση με τρεις τρόπους να την αγνοήσει να την χειριστεί στο σημείο που παράγεται να την χειριστεί σε κάποιο άλλο σημείο του προγράμματος 8

Κατηγοριοποίηση Εξαιρέσεων Checked Exceptions Πρέπει είτε να «συλληφθούν» (caught) από μια μέθοδο ή να δηλωθούν στην υπογραφή της Unchecked Exceptions Δεν είναι υποχρεωτικό να χειριστούμε αυτούς τους τύπους εξαιρέσεων. Runtime exceptions μπορεί να προέρχονται από μεθόδους ή και από την ίδια τη JVM. Τα Errors παράγονται από τη JVM, και συνήθως αφορούν μια fatal state. 9

Κατηγοριοποίηση Εξαιρέσεων Unchecked exceptions ArithmenticException ArrayIndexOutOfBoundsExcept ion ArrayStoreException ClassCastException IllegalMonitoStateException IllegalStateException IllegalThreadStateException Checked exceptions ClassNotFoundException CloneNotSupportedException IllegalAccessException InstantiationException IterruptedException NoSuchFileException NoSuchMEthodException 10

Keywords for Java Exceptions throws Περιγράφει τις εξαιρέσεις που μπορεί να παραχθούν από μια μέθοδο. throw Παραγωγή μιας εξαίρεσης και προώθηση στον πρώτο διαθέσιμο χειριστή στην στοίβα κλήσεων. try Υποδηλώνει την αρχή ενός block που σχετίζεται με ένα σύνολο χειριστών εξαιρέσεων (μπορεί να παράγει εξαιρέσεις). catch Αν το block try παράγει μια εξαίρεση του αντίστοιχου τύπου, η ροή του ελέγχου μεταφέρεται εδώ. finally Καλείται πάντοτε όταν τερματίζεται το τμήμα try και μετά από οποιοδήποτε τυχόν χειρισμό στο τμήμα catch. 11

Try catch (finally) TRY: ορίζει το μπλοκ κώδικα που μπορεί να προκαλέσει exception. Το μπλοκ αυτό ονομάζεται guarded region. Κάθε μπλοκ try πρέπει να περιέχει κάτι από τα παρακάτω: Τουλάχιστον ένα catch block αλλά μπορεί να έχει και περισσότερα Μόνο ένα finally block catch blocks και ένα finally block Τα catch blocks προηγούνται του finally block FINALLY: περιέχει κώδικα που εκτελείται πάντα είτε προκλήθηκε εξαίρεση, είτε όχι. Π.χ. κλείσιμο αρχείων, συνδέσεων με ΒΔ, network sockets, κτλ. Μόνο 1 finally block ανά εντολή try

Γενική σύνταξη public void setproperty(string p_strvalue) throws NullPointerException { if (p_strvalue == null) { throw new NullPointerException(... ); public void mymethod(string text) { MyClass oclass = new MyClass(); try { oclass.setproperty(text); oclass.dosomework(); catch (NullPointerException npe) { System.err.println( Unable to set property: +npe.tostring()); finally { oclass.cleanup();

Παράδειγμα public void foo() { try { /* αρχή ενός block try-catch */ int a[] = new int[2]; a[4] = 1; /* προκαλεί runtime exception λόγω του index */ catch (ArrayIndexOutOfBoundsException e) { System.out.println("exception: " + e.getmessage()); e.printstacktrace(); /* ο κώδικας που ακολουθεί περνάει το compile, αλλά παράγει exception στο χρόνο εκτέλεσης. Πρόκειται για περίπτωση λιγότερο προφανή αλλά πολύ συνηθισμένη (an off-by-oneerror) */ public int[] bar() { int a[] = new int[2]; for (int x = 0; x <= 2; x++) { a[x] = 0; return a; 14

Πλεονεκτήματα των Exceptions Από The Java Tutorials http://docs.oracle.com/javase/tutorial/essential/exceptions/advantages.html Πλεονέκτημα 1: Διαχωρισμός κώδικα χειρισμού σφαλμάτων από «κανονικό» κώδικα (αποφυγή spaghetti code) 15

Πλεονεκτήματα των Exceptions Έστω το παρακάτω τμήμα (ψευδο)κώδικα readfile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; Ο κώδικας φαίνεται αρκετά «απλός» και καθαρός αλλά αγνοεί τα παρακάτω πιθανά σφάλματα: -Τι θα συμβεί αν το αρχείο δεν μπορεί να ανοίξει? -Τι θα συμβεί αν το μήκος του αρχείου δεν μπορεί να προσδιοριστεί? -Τι θα συμβεί εάν δεν μπορεί να δεσμευθεί η απαραίτητη μνήμη? -Τι θα συμβεί εάν η ανάγνωση του αρχείου αποτύχει? -Τι θα συμβεί εάν το αρχείο δεν μπορεί να κλείσει? 16

Πλεονεκτήματα των Exceptions Θα μπορούσαμε να γράψουμε κώδικα για τον χειρισμό και την αναφορά όλων των πιθανών προβλημάτων ως εξής: errorcodetype readfile { initialize errorcode = 0; open the file; if (thefileisopen) { determine the length of the file; if (gotthefilelength) { allocate that much memory; if (gotenoughmemory) { Υπάρχει τόσος κώδικας για read the file into memory; τον χειρισμό των if (readfailed) { σφαλμάτων που οι αρχικές errorcode = -1; 5 γραμμές κώδικα έχουν else { «χαθεί» errorcode = -2; else { errorcode = -3; close the file; if (thefiledidntclose && errorcode == 0) { errorcode = -4; else { errorcode = errorcode and -4; else { errorcode = -5; return errorcode; 17

Πλεονεκτήματα των Exceptions Ο μηχανισμός των εξαιρέσεων επιτρέπει να διατηρήσουμε ανέπαφη τη λογική του κυρίως κώδικα και να χειριστούμε τα σφάλματα σε άλλο σημείο: readfile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; catch (fileopenfailed) { dosomething; catch (sizedeterminationfailed) { dosomething; catch (memoryallocationfailed) { dosomething; catch (readfailed) { dosomething; catch (fileclosefailed) { dosomething; 18

Πλεονεκτήματα των Exceptions Πλεονέκτημα 2: «Προώθηση» των σφαλμάτων προς τα πάνω στην στοίβα κλήσεων Έστω ότι η readfile είναι η 4 η μέθοδος στη σειρά σε μια ακολουθία κλήσεων μεθόδων από το κυρίως πρόγραμμα (method1->method2->method3->readfile Έστω ότι η method1 είναι η μόνη μέθοδος που ενδιαφέρεται για τα σφάλματα που μπορεί να συμβούν στην readfile Η συμβατική αντιμετώπιση θα ήταν 19

Πλεονεκτήματα των Exceptions method1 { errorcodetype error; error = call method2; if (error) doerrorprocessing; else proceed; errorcodetype method2 { errorcodetype error; error = call method3; if (error) return error; else proceed; errorcodetype method3 { errorcodetype error; error = call readfile; if (error) return error; else proceed; 20

Πλεονεκτήματα των Exceptions Αντιμετώπιση με τον μηχανισμό των exceptions method1 { try { call method2; catch (exception e) { doerrorprocessing; method2 throws exception { call method3; method3 throws exception { call readfile; readfile throws exception {... ; 21

Πλεονεκτήματα των Exceptions Πλεονέκτημα 3: Κατηγοριοποίηση και Διαφοροποίηση βάσει τύπου των σφαλμάτων Όλες οι εξαιρέσεις είναι αντικείμενα κλάσεων Μια μέθοδος μπορεί να γράψει κώδικα για τον χειρισμό μιας συγκεκριμένης κατηγορίας σφαλμάτων catch (FileNotFoundException e) {... Χειρισμός μόνο σφαλμάτων που σχετίζονται με αδυναμία εύρεσης του αρχείου catch (ΙΟException e) {... Χειρισμός όλων των I/O σφαλμάτων ανεξαρτήτως του ειδικού τους τύπου 22

Ιεραρχία εξαιρέσεων στη Java Error Exception Ασυνήθιστες καταστάσεις που δεν προκαλούνται από λάθη του κώδικα αλλά γενικότερης φύσης προβλήματα που μπορεί να συμβούν (π.χ. JVM running out of memory). Δε μπορούμε να επανακάμψουμε με κάποιο τρόπο από ένα Error και δεν χρειάζεται να γράψουμε κώδικα για να το διαχειριστούμε. Πρακτικά τα Errors δεν είναι εξαιρέσεις (δεν προέρχονται από την κλάση Exception) Δεν αφορά κάτι που είναι αποτέλεσμα προγραμματιστικού λάθους αλλά το ότι δεν είναι διαθέσιμος κάποιος πόρος ή κάποια άλλη συνθήκη που είναι απαραίτητη για την ορθή εκτέλεση του κώδικα. Π.χ. αν ο κώδικας πρέπει να συνδεθεί με κάποια άλλη εφαρμογή ή άλλο υπολογιστή που δεν ανταποκρίνεται. java.lang.throwable java.lang.error java.lang.exception java.lang.threaddeath java.lang.runtimeexception java.io.ioexception java.lang.nullpointerexception java.lang.illegalargumentexception java.io.filenotfoundexception

Δημιουργία δικής σας exception class /* You should extend RuntimeException to create an unchecked exception, * or Exception to create a checked exception. */ class MyException extends Exception { /* This is the common constructor. It takes a text argument. */ public MyException(String p_strmessage) { super(p_strmessage); /* A default constructor is also a good idea! */ public MyException () { super();

Κληρονομικότητα και Exceptions Όταν παράγεται μια εξαίρεση σε ένα try block η java αντιμετωπίζει τα πολλαπλά catch statements σαν τα cases σε μια switch εντολή Το πρώτο catch που ικανοποιεί το είδος της εξαίρεσης θα εκτελεστεί και τα υπόλοιπα τα προσπερνάει Είναι σημαντικό να τοποθετούμε τα subclass exceptions ΠΡΙΝ από τα superclass exceptions αλλιώς προκαλείται συντακτικό λάθος Copyright (c) 2001 DeLorme 26

import java.io.ioexception; class TesteExceptions { public static void main (String args[]) { int num1 = 100; int num2 = 50; int num3 = 50; int result1; try { Έξοδος: result1 = num1/(num2-num3); System.out.println("Result1 = " +result1); catch (Exception e) { System.out.println("This is a mistake"); catch (ArithmeticException g) {System.out.println("Dinision by zero"); Syntax error: Arithmetic Exception has already been caught 27