java:exceptions_try_catch_block

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
java:exceptions_try_catch_block [2015/03/03 08:00]
gthanos created
java:exceptions_try_catch_block [2019/04/20 03:55] (current)
gthanos [Άλλο παράδειγμα - Ανοίγοντας ένα αρχείο για διάβασμα]
Line 1: Line 1:
-====== ​Try - catch block ======+====== ​Διαχείριση Εξαιρέσεων ​======
 Στην προηγούμενη υποενότητα αναφερθήκαμε συνοπτικά στο αντικείμενο της εξαίρεσης. Εδώ θα δόυμε τον τρόπο με τον οποίο διαχειριζόμαστε τις εξαιρέσεις. ​ Στην προηγούμενη υποενότητα αναφερθήκαμε συνοπτικά στο αντικείμενο της εξαίρεσης. Εδώ θα δόυμε τον τρόπο με τον οποίο διαχειριζόμαστε τις εξαιρέσεις. ​
  
-===== Exception Handler ​===== +===== Try-Catch Block ===== 
-Κάθε τμήμα του κώδικα που υπάρχει περίπτωση να πυροδοτήσει μια εξαίρεση θα πρέπει να την εμπερικλείουμε σε ένα try block. Το block αυτό του κώδικα θα περιγράφει τον τρόπο αντιμετώπισης της κάθε πιθανής εξαίρεσης που μπορεί να προκύψει. Ο ορισμός του block είναι ο εξής:+Κάθε τμήμα του κώδικα που υπάρχει περίπτωση να πυροδοτήσει μια εξαίρεση θα πρέπει να την εμπερικλείουμε σε ένα ​**try block**. Το block αυτό του κώδικα θα περιγράφει τον τρόπο αντιμετώπισης της κάθε πιθανής εξαίρεσης που μπορεί να προκύψει. Ο ορισμός του block είναι ο εξής:
  
 <code java> <code java>
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 =====
  
-Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα finaly block το οποίο θα εκτελεστεί __σε κάθε περίπτωση__. Το finaly block θα εκτελεστεί στις παρακάτω περιπτώσεις:​ +Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα ​**finaly block** το οποίο θα εκτελεστεί __σε κάθε περίπτωση__. Το **finaly block** θα εκτελεστεί στις παρακάτω περιπτώσεις:​ 
-  * Εάν προκύψει η εξαίρεση που έχουμε φροντίσει να διαχειριστούμε (στο παρακάτω παράδειγμα FileNotFoundException).+  * Εάν προκύψει η εξαίρεση που έχουμε φροντίσει να διαχειριστούμε (στο παρακάτω παράδειγμα ​//FileNotFoundException//).
   * Εάν προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να διαχειριστούμε.   * Εάν προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να διαχειριστούμε.
   * Εάν δεν προκύψει καμία απολύτως εξαίρεση.   * Εάν δεν προκύψει καμία απολύτως εξαίρεση.
  
 Δείτε το παρακάτω παράδειγμα όπου ενσωματώνει ένα **finally** block. Δείτε το παρακάτω παράδειγμα όπου ενσωματώνει ένα **finally** block.
-<code java>+<​code ​java WholeFileReader.java>
 import java.io.*; import java.io.*;
 import java.lang.*;​ import java.lang.*;​
Line 169: Line 169:
       while ((inputLine = in.readLine()) != null) {       while ((inputLine = in.readLine()) != null) {
         strDocument.append(inputLine);​         strDocument.append(inputLine);​
-        //throw new IOException();​ 
       }       }
-      fReader.close();​ 
       return strDocument.toString();​       return strDocument.toString();​
     }     }
Line 212: 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 219:
       }       }
 </​code>​ </​code>​
 +
 +|Προηγούμενο:​ [[:​java:​exceptions_intro| Εξαιρέσεις ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο:​ [[:​java:​exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]]|
 +
  
java/exceptions_try_catch_block.1425369643.txt.gz · Last modified: 2016/02/26 11:15 (external edit)