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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 8: Πακέτα (Packages)

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays)

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Διοικητική Λογιστική

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Εισαγωγή στους Αλγορίθμους

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Εισαγωγή στους Αλγορίθμους

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

Κβαντική Επεξεργασία Πληροφορίας

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

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 6: Πίνακες [2/2] (Δισδιάστατοι)

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Φιλοσοφία της Ιστορίας και του Πολιτισμού

Διδακτική των εικαστικών τεχνών Ενότητα 1

Διδακτική των εικαστικών τεχνών Ενότητα 3

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Εισαγωγή στους Αλγορίθμους

Διδακτική των εικαστικών τεχνών Ενότητα 2

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

Διοικητική Λογιστική

Έλεγχος Ποιότητας Φαρμάκων

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

Γενική Φυσική Ενότητα: Ταλαντώσεις

Μηχανολογικό Σχέδιο Ι

Γενική Φυσική Ενότητα: Εισαγωγή στην Ειδική Θεωρία της Σχετικότητας

Διδακτική των εικαστικών τεχνών Ενότητα 2

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 5: Κατασκευαστές (Constructors)

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Βάσεις Περιβαλλοντικών Δεδομένων

Τεχνικό Σχέδιο - CAD

Το Εικονογραφημένο Βιβλίο στην Προσχολική Εκπαίδευση

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Συστήματα αρίθμησης

Ιστορία της μετάφρασης

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

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης

Θεατρικές Εφαρμογές και Διδακτική της Φυσικής Ι

Τεχνικό Σχέδιο - CAD

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Υπολογιστική άλγεβρα Ενότητα 10: Βάσεις Groebner ενός ιδεώδους ΙΙΙ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στις Επιστήμες της Αγωγής

Κβαντική Επεξεργασία Πληροφορίας

Το Εικονογραφημένο Βιβλίο στην Προσχολική Εκπαίδευση

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή

Εισαγωγή στους Υπολογιστές

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Διδακτική των εικαστικών τεχνών Ενότητα 2

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Γενική Φυσική Ενότητα: Δυναμική Άκαμπτου Σώματος

Εισαγωγή στη Μουσική Τεχνολογία Ενότητα: Ελεγκτές MIDI μηνυμάτων (Midi Controllers)

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

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

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

Υπολογιστική άλγεβρα Ενότητα 1: Πολυωνυμικές σχέσεις και ταυτότητες, μέρος Ι

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 2: Έλεγχος συνθηκών

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Διδακτική Πληροφορικής

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 7: Αλγόριθμοι γραμμικής άλγεβρας

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Λειτουργία και εφαρμογές της πολιτιστικής διαχείρισης

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

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Βέλτιστος Έλεγχος Συστημάτων

Σχεδίαση Ολοκληρωμένων Κυκλωμάτων Μέρος Α-Ενότητα 5: Φωτολιθογραφία. Αγγελική Αραπογιάννη Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Διδακτική της Πληροφορικής

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

Εισαγωγή στους Υπολογιστές

Transcript:

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 10: Exceptions handling (Χειρισμός εξαιρέσεων) Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 10 Exceptions handling (Χειρισμός εξαιρέσεων) Exception: σφάλμα που προκλήθηκε κατά την εκτέλεση του προγράμματος και που μπορεί να αντιμετωπιστεί από τον προγραμματιστή Error: σοβαρό σφάλμα που οφείλεται σε πρόβλημα που δεν μπορεί να αντιμετωπιστεί (πχ, out of memory, stack overflow, κτλ) [θεωρητικά μπορεί να αντιμετωπιστεί, αλλά πρακτικά δεν αντιμετωπίζεται, αφού η λειτουργία του προγράμματος μετά από ένα τέτοιο σφάλμα είναι συνήθως προβληματική] Τα exceptions μπορούν να αντιμετωπιστούν, άρα χρειάζονται ειδικό χειρισμό (exceptions handling) Η κλάση Exception ορίζει απλές συνθήκες λάθους που μπορεί να συναντήσει κάποιο πρόγραμμα Αντί να αφήνουμε το πρόγραμμα να τερματιστεί, μπορούμε να γράψουμε κώδικα που να χειρίζεται τις εξαιρέσεις και να συνεχίζει την εκτέλεση του προγράμματος Όταν συμβεί κάποιο σφάλμα στο πρόγραμμα, ο κώδικας που το ανακαλύπτει «μεταβιβάζει» (throws ο αγγλικός όρος) μια εξαίρεση Αν «συλλάβουμε» (catch) την εξαίρεση, είναι δυνατόν να επανακάμψουμε το πρόγραμμα ή να δώσουμε στο χρήστη κατάλληλα μηνύματα/οδηγίες Η «σύλληψη» γίνεται εγκλωβίζοντας τον κώδικα που μπορεί να πετάξει/μεταβιβάσει μια εξαίρεση σε ένα -block και τοποθετώντας στη συνέχεια ένα τουλάχιστον catch-block Στο σημείο που θα συμβεί η εξαίρεση, η εκτέλεση του κώδικα διακόπτεται και η ροή του συνεχίζεται στο catch-block // κώδικας που μπορεί να προκαλέσει μια συγκεκριμένη εξαίρεση catch(exceptiontype e) // κώδικας που θα εκτελεστεί αν προκύψει η ExceptionType Μπορεί να υπάρχουν και περισσότερα catch σε ένα Ο έλεγχος περνάει από το πρώτο στο επόμενο κτλ, μέχρι να βρεθεί το κατάλληλο Γι αυτό, ξεκινάμε από το πιο ειδικό (εξειδικευμένο) catch στο πιο γενικό Υπάρχει προαιρετικά και το block finally που περιέχει κώδικα ο οποίος θα εκτελεστεί είτε γίνει είτε δε γίνει κάποιο exception Μάλιστα, ο κώδικας του finally θα εκτελεστεί ακόμα και εάν δε συλληφθεί κάποια εξαίρεση Από τη στιγμή που ούτως ή άλλως ο κώδικας που υπάρχει μετά τα catch θα εκτελεστεί, η χρήση του finally επιβάλλεται κυρίως όταν το πρόγραμμα τερματίζεται νωρίτερα, πχ με κάποιο return ή μετά από κάποιο σφάλμα εξαίρεσης που δεν συλλαμβάνεται σε αντίστοιχο catch, όπως προαναφέρθηκε Σε μια τέτοια περίπτωση, θα εκτελεστεί το finallyblock και μετά θα τερματιστεί η εκτέλεση του προγράμματος ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 1

- Εκτός από τις εξαιρέσεις που προκύπτουν αυτόματα όταν κάτι πάει στραβά σε κάποιο πρόγραμμα, ο προγραμματιστής έχει τη δυνατότητα να προκαλέσει ο ίδιος κάποια εξαίρεση Ο τρόπος είναι ο εξής: throw new ExceptionType( κείμενο περιγραφής της εξαίρ ); Συνήθως μεταβιβάζουμε (προκαλούμε) κάποια εξαίρεση εάν συμβεί κάτι συγκεκριμένο, δηλαδή συνήθως το throw βρίσκεται μέσα σε κάποια συνθήκη (πχ, if) Στην ουσία, με το throw new δημιουργείται ένα αντικείμενο της κλάσης ExceptionType (του παραπάνω παραδείγματος) το οποίο παίρνει όνομα στο αντίστοιχο catch-block Άρα, γενικά, το ολοκληρωμένο block χειρισμού είναι: -throw-catch: // δηλώσεις throw new ExceptionTypeX( δικό μας κείμενο ); // δηλώσεις catch(exceptiontype1 e1) // κάνε αυτό αν συμβεί η εξαίρεση ExceptionType1 catch(exceptiontypeχ eχ) // κάνε αυτό αν συμβεί η εξαίρεση ExceptionTypeΧ [finally // κάνε αυτό είτε συμβεί είτε δε συμβεί κάποια // από τις παραπάνω εξαιρέσεις ] - Τα ExceptionTypeΧ είναι συγκεκριμένοι τύποι εξαιρέσεων της Java, πχ, ArrayIndexOutOfBoundsException, NullPointerException, IOException, ClassNotFoundException, FileNotFoundException, κτλ - Υπάρχουν μέθοδοι που επιστρέφουν περιγραφή της κάθε εξαίρεσης, πχ: catch(arrayindexoutofboundsexception e) Systemoutprintln(etoString()); // σύντομη περιγραφή εξαίρεσης Systemoutprintln(egetMessage()); // αναλυτική περιγρ εξαίρεσης Προσοχή! Αν μια εξαίρεση δε συμβαίνει μέσα σε ή αν δε συλλαμβάνεται στη συνέχεια σε κάποιο catch(), είναι σαν να μην υπάρχει, από άποψη χειρισμού (handling) ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 2

Παράδειγμα -throw-catch import javautil*; public class ExceptionsExample1 public static void main(string [] args) int donuts, milkglasses; double donutsperglass; Scanner input = new Scanner(Systemin); Systemoutprintln( Πόσα donuts? ); donuts = inputnextint(); Systemoutprintln( Πόσα ποτήρια γάλα? ); milkglasses = inputnextint(); if (milkglasses < 1) throw new Exception( Exception: No milk! ); donutsperglass = donuts / (double)milkglasses; Systemoutprintln( Donuts per glass = + donutsperglass); catch (Exception e) Systemoutprintln(egetMessage()); Systemoutprintln( End of program ); Με inputs 3 και 2: Με inputs 3 και 0: 3 3 2 0 Donuts per glass: 15 Exception: No milk! End of program End of program Στη δεύτερη εκτέλεση του προγράμματος (με δεδομένα 3 και 0), δεν εκτελείται η εντολή Systemoutprintln( Donuts per glass = + donutsperglass); αφού στην ακριβώς προηγούμενη εντολή προκύπτει εξαίρεση, οπότε σταματάει η κανονική ροή του κώδικα και εκτελείται η εντολή του catch-block Δημιουργία κλάσης εξαίρεσης Οι εξαιρέσεις είναι υποκλάσεις της κλάσης Exception Άρα, όταν θέλουμε να δημιουργήσουμε μία δική μας κλάση εξαίρεσης, θα πρέπει να κληρονομούμε την κλάση Exception Πχ: public class DivideByZeroException extends Exception public DivideByZeroException() super("dividing by zero!"); ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 3

public DivideByZeroException(String message) super(message); και μία κλάση που χρησιμοποιεί αυτή την κλάση εξαίρεσης: import javautil*; public class DivByZeroExample private int num, den; private double fraction; public void divide() Systemoutprintln("Αριθμητής?"); Scanner input = new Scanner(Systemin); num = inputnextint(); Systemoutprintln("Παρανομαστής?"); den = inputnextint(); if (den == 0) throw new DivideByZeroException(); fraction = num / (double)den; Systemoutprintln("Κλάσμα = " + fraction); catch(dividebyzeroexception e) Systemoutprintln(egetMessage()); secondchance(); // υποθέτουμε ότι υπάρχει και μία μέθοδος secondchance // που ξαναζητάει την πιο προσεχτική είσοδο δεδομένων // end of method devide public static void main(string [ ] args) DivByZeroExample obj = new DivByZeroExample(); objdivide(); [Στο συγκεκριμένο παράδειγμα, η μέθοδος main βρίσκεται στην ίδια την κλάση που βρίσκεται και η divide Επειδή η main είναι static, δεν έχει άμεση πρόσβαση στη μέθοδο divide που δεν είναι static, οπότε για να την καλέσει πρέπει πρώτα να δημιουργήσει αντικείμενο (obj) της ίδιας της κλάσης στην οποία βρίσκεται Αυτή η δημιουργία, όπως έχει αναφερθεί και σε προηγούμενο κεφάλαιο, είναι η μόνη λύση για την κλήση μη-static μεθόδων από static μεθόδους της ίδιας κλάσης Εναλλακτικά, θα μπορούσε προφανώς να δηλωθεί ως static η μέθοδος divide] Δήλωση εξαιρέσεων σε μέθοδο: Υπάρχουν περιπτώσεις που κάποια εξαίρεση μπορεί να θέλουμε να την κάνουμε catch μόνο εάν συντρέχουν κάποιοι λόγοι, που σημαίνει ότι μπορεί και να μην θέλουμε να την κάνουμε catch (δηλαδή να μη θέλουμε να τη διαχειριστούμε και να αφήσουμε το πρόγραμμα να τερματιστεί) Σε αυτές τις περιπτώσεις, ο κώδικας που μπορεί να μεταβιβάσει εξαίρεση μπαίνει σε μια μέθοδο (η ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 4

οποία στην ουσία μεταβιβάζει (μεταθέτει) την ευθύνη του χειρισμού της εξαίρεσης στη μέθοδο που την καλεί και) η οποία δεν περιέχει -catch block, αλλά: δηλώνει στον ορισμό της (προειδοποιεί) ότι πιθανόν θα προκαλέσει κάποια εξαίρεση αυτό γίνεται με την πρόταση throws καλείται μέσα σε ένα -block (σε μια άλλη μέθοδο προφανώς) το οποίο φυσικά έχει και το αντίστοιχο catch (εάν τελικά θέλουμε να διαχειριστούμε την εξαίρεση διαφορετικά η μέθοδος καλείται χωρίς -catch) Παράδειγμα: import javautil*; public class ExceptionsExample2 Scanner input = new Scanner(Systemin); public int getint() throws Exception Systemoutprintln( Πληκτρολόγησε έναν ακέραιο: ); int n = inputnextint(); return n; public void divide() int n1=0, n2=1, n3=0; n1 = getint(); n2 = getint(); n3 = n1/n2; catch(exception e) Systemoutprintln(etoString()); Systemoutprintln(n1 + / + n2 + = + n3); Η μέθοδος divide() καλείται από τη main μέθοδο, στην κλάση εφαρμογής Στη main λοιπόν: ExceptionsExample2 ex2 = new ExceptionsExample2(); ex2divide(); Αν τα inputs είναι πχ 22 και 3, τότε το πρόγραμμα θα τυπώσει: 22/3=7 Αν όμως τα inputs είναι πχ 22 και w, θα τυπώσει: [InputMismatchException] 22/1=0 ενώ αν τα inputs είναι 22 και 0, τότε θα τυπώσει: [ArithmeticException: / by zero] 22/0=0 ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 5

Στη δεύτερη περίπτωση, ο κώδικας πετάει εξαίρεση γιατί αντί για ακέραιος δόθηκε χαρακτήρας (w) για το n2 Η εξαίρεση προκαλείται κατά την κλήση της μεθόδου getint(), η οποία όντως προειδοποιούσε ότι μπορεί να συνέβαινε κάτι τέτοιο, και συλλαμβάνεται από το catch, το οποίο τυπώνει το σύντομο μήνυμα Ο κώδικας συνεχίζει να εκτελείται, οπότε τυπώνονται οι τιμές των n1, n2 και n3 Η τιμή του n1 είναι αυτή που δόθηκε από το χρήστη, η τιμή του n2 (1) είναι η αρχική του τιμή, αφού η εντολή απόδοσης τιμής στη μεταβλητή αυτή δεν εκτελέστηκε, επειδή συνέβη η εξαίρεση, και το ίδιο ισχύει και για το n3 (όταν συμβαίνει κάποιο exception, η ροή του κώδικα διακόπτεται και πηγαίνει στο αντίστοιχο catch) Αντίστοιχα, στην τρίτη περίπτωση, επιχειρείται να γίνει διαίρεση με το 0, οπότε ο κώδικας μεταβιβάζει την ανάλογη εξαίρεση (η εξαίρεση πλέον προκαλείται από εντολή της μεθόδου divide() και όχι από μεταβίβαση από τη μέθοδο getint()), η οποία συλλαμβάνεται από το catch, το οποίο τυπώνει το σύντομο μήνυμα Ο κώδικας συνεχίζει να εκτελείται, οπότε τυπώνονται οι τιμές που δόθηκαν για τα n1 και n2, ενώ η τιμή 0 του n3 είναι η αρχική του τιμή, αφού στην ουσία η διαίρεση δεν έγινε ποτέ Στο συγκεκριμένο παράδειγμα, το catch είναι πολύ γενικό για να συλλάβει και τις δύο διαφορετικές εξαιρέσεις που συμβαίνουν κατά την εκτέλεση Γενικός κανόνας: Αν μία μέθοδος μεταβιβάζει κάποια εξαίρεση (με την εντολή throw), τότε είτε πρέπει να περιέχει κάποιο catch για να τη συλλάβει, είτε πρέπει να δηλώνει στον ορισμό της ότι μεταβιβάζει κάποια εξαίρεση (με το throws) Παράδειγμα: public class CatchExample public static void main(string [] args) CatchExample obj = new CatchExample(); Systemoutprintln("Trying"); objmymethod(); Systemoutprintln("Trying after call"); catch(exception e) Systemoutprintln("Catching"); Systemoutprintln(egetMessage()); public void mymethod() throws Exception Systemoutprintln("Starting mymethod"); throw new Exception("From mymethod"); Το πρόγραμμα αυτό θα εκτυπώσει: Trying Starting mymethod Catching From mymethod ver 130425 Τμήμα Μαθηματικών ΕΚΠΑ 6

Σημειώματα Σημείωμα Αναφοράς Copyright Εθνικόν και Καποδιστριακόν Πανεπιστήμιον Αθηνών, Μιχάλης Δρακόπουλος, 2014 Μιχάλης Δρακόπουλος «Πληροφορική ΙI Ενότητα 10: Exceptions handling (Χειρισμός εξαιρέσεων)» Έκδοση: 10 Αθήνα 2014 Διαθέσιμο από τη δικτυακή διεύθυνση: http://opencoursesuoagr/courses/math106/ Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 40 [1] ή μεταγενέστερη, Διεθνής Έκδοση Εξαιρούνται τα αυτοτελή έργα τρίτων πχ φωτογραφίες, διαγράμματα κλπ, τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων» [1] http://creativecommonsorg/licenses/by-nc-sa/40/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (πχ διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους Σελίδα 4