This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:exceptions_try_catch_block [2016/02/15 11:01] gthanos [Finaly Block] |
java:exceptions_try_catch_block [2019/04/20 03:55] (current) gthanos [Άλλο παράδειγμα - Ανοίγοντας ένα αρχείο για διάβασμα] |
||
---|---|---|---|
Line 29: | Line 29: | ||
Εντός του **try** block βάζουμε τον κώδικα που μπορεί να δημιουργηθεί μια εξαίρεση. Κάθε **catch** block ορίζει ένα διαφορετικό τύπο εξαίρεσης μέσα σε παρένθεση (''ExceptionTypeOne'', ''ExceptionTypeTwo'', κλπ). Εάν η εξαίρεση που παράγεται συμπίπτει __ως προς τον τύπο__ της με ένα αντικείμενο που ορίζεται εντός της παρενθέσεως ενός **catch** block, τότε αυτό το block θα εκτελεστεί. Θα εκτελεστεί επομένως ο κώδικας αντιστοιχεί στον τύπο δεδομένων ο οποίος παράχθηκε από την εκάστοτε εξαίρεση. | Εντός του **try** block βάζουμε τον κώδικα που μπορεί να δημιουργηθεί μια εξαίρεση. Κάθε **catch** block ορίζει ένα διαφορετικό τύπο εξαίρεσης μέσα σε παρένθεση (''ExceptionTypeOne'', ''ExceptionTypeTwo'', κλπ). Εάν η εξαίρεση που παράγεται συμπίπτει __ως προς τον τύπο__ της με ένα αντικείμενο που ορίζεται εντός της παρενθέσεως ενός **catch** block, τότε αυτό το block θα εκτελεστεί. Θα εκτελεστεί επομένως ο κώδικας αντιστοιχεί στον τύπο δεδομένων ο οποίος παράχθηκε από την εκάστοτε εξαίρεση. | ||
- | Ας δούμε ένα μικρό τμήμα κώδικα που εντοπίζει ένα είδος εξαίρεσης το οποίο συναντήσαμε και παραπάνω: | + | Στο προηγούμενο παράδειγμα, ας προσθέσουμε ένα τμήμα κώδικα που εντοπίζει το είδος εξαίρεσης το οποίο συναντήσαμε παραπάνω: |
<code java TestDivideByZero.java> | <code java TestDivideByZero.java> | ||
Line 61: | Line 61: | ||
</code> | </code> | ||
- | Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα, εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''ArithmeticException'' και συγκεκριμένα διαίρεση με το μηδέν (0) και θα εκτυπώσει τα σχετικά μηνύματα. | + | Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα, εμπλουτισμένο όμως με κώδικα διαχείρισης της εξαίρεση που παράγεται από τη διαίρεση ενός ακεραίου με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''ArithmeticException'' και συγκεκριμένα διαίρεση με το μηδέν (0) και θα εκτυπώσει τα σχετικά μηνύματα. |
- | === Ανοίγοντας ένα αρχείο για διάβασμα === | + | ===== Άλλο παράδειγμα - Ανοίγοντας ένα αρχείο για διάβασμα ===== |
- | Παρακάτω δίνεται ένα πιο σύνθετο παράδειγμα μία μεθόδου που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String. | + | Παρακάτω δίνεται ένα πιο σύνθετο παράδειγμα μία μεθόδου που ανοίγει ένα αρχείο κειμένου για διάβασμα και επιστρέφει το περιεχόμενο του σε μορφή συμβολοσειράς (//String//). |
<code java WholeFileReader.java> | <code java WholeFileReader.java> | ||
Line 82: | Line 82: | ||
StringBuffer strDocument = new StringBuffer(); | StringBuffer strDocument = new StringBuffer(); | ||
while ((inputLine = in.readLine()) != null) { | while ((inputLine = in.readLine()) != null) { | ||
- | strDocument.append(inputLine); | + | strDocument.append(inputLine+"\n"); |
//throw new IOException(); | //throw new IOException(); | ||
} | } | ||
Line 142: | Line 142: | ||
} | } | ||
</code> | </code> | ||
- | για να δημιουργήσετε ένα ''IOException'' και παρατηρήστε από τα μηνύματα που εκτυπώνονται κατά την εκτέλεση του προγράμματος την πορεία του προγράμματος. | + | με στόχο να δημιουργήσετε ένα ''IOException'' και παρατηρήστε από τα μηνύματα που εκτυπώνονται κατά την εκτέλεση του προγράμματος την πορεία του προγράμματος. |
===== Finaly Block ===== | ===== Finaly Block ===== | ||
Line 169: | Line 169: | ||
while ((inputLine = in.readLine()) != null) { | while ((inputLine = in.readLine()) != null) { | ||
strDocument.append(inputLine); | strDocument.append(inputLine); | ||
- | //throw new IOException(); | ||
} | } | ||
return strDocument.toString(); | return strDocument.toString(); | ||
Line 211: | Line 210: | ||
</code> | </code> | ||
- | Ο λόγος που συνήθως χρησιμοποιήσουμε το **finally** block είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί σε όλες τις περιπτώσεις, όπως για παράδειγμα να κλείσουμε ελεγχόμενα τα αρχεία του προγράμματος ή να κλείσουμε δικτυακές συνδέσεις (π.χ. συνδέσεις με βάσεις δεδομένων κ.α.). Στο παραπάνω παράδειγμα παραλλάσσεται η μέθοδος ReadFile του προηγούμενου παραδείγματος, ώστε στο //finally// block η μέθοδος κλείνει το αρχείο που άνοιξε. Η διαφορά σε σχέση με την προηγούμενη μέθοδο είναι ότι ακόμη και εάν δημιουργηθεί ένα exception την ώρα που διαβάζουμε η ροή του προγράμματος θα περάσει από το finally block και το αρχείο θα κλείσει. Αυτό δεν ισχύει στο παράδειγμα που δώσαμε προηγούμενα. | + | Ο λόγος που συνήθως χρησιμοποιήσουμε το **finally** block είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί σε όλες τις περιπτώσεις, όπως για παράδειγμα να κλείσουμε ελεγχόμενα τα αρχεία του προγράμματος ή να κλείσουμε δικτυακές συνδέσεις (π.χ. συνδέσεις με βάσεις δεδομένων κ.α.). Στο παραπάνω παράδειγμα παραλλάσσεται η μέθοδος ReadFile του προηγούμενου παραδείγματος, ώστε στο //finally// block η μέθοδος κλείνει το αρχείο που άνοιξε. Η διαφορά σε σχέση με το προηγούμενο παράδειγμα είναι ότι ακόμη και εάν δημιουργηθεί ένα exception την ώρα που διαβάζουμε, η ροή του προγράμματος θα περάσει από το //finally block// και το αρχείο τελικά θα κλείσει. Αυτό δεν ισχύει στο παράδειγμα που δώσαμε προηγούμενα. |
Στο παραπάνω παράδειγμα δείτε την πορεία του κώδικα βγάζοντας τα σχόλια και βάζοντας σε σχόλια την γραμμή που δημιουργεί το ''IOException''. | Στο παραπάνω παράδειγμα δείτε την πορεία του κώδικα βγάζοντας τα σχόλια και βάζοντας σε σχόλια την γραμμή που δημιουργεί το ''IOException''. | ||
Line 221: | Line 220: | ||
</code> | </code> | ||
- | |Προηγούμενο: [[:java:exceptions_intro| Εξαιρέσεις ]] | Επόμενο: [[:java:exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]]| | + | |Προηγούμενο: [[:java:exceptions_intro| Εξαιρέσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]]| |