java:exceptions_try_catch_block

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:exceptions_try_catch_block [2016/02/15 10:18]
gthanos
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 =====
  
-Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα finaly block το οποίο θα εκτελεστεί __σε κάθε περίπτωση__. Το finaly block θα εκτελεστεί στις παρακάτω περιπτώσεις:​ +Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα ​**finaly block** το οποίο θα εκτελεστεί __σε κάθε περίπτωση__. Το **finaly block** θα εκτελεστεί στις παρακάτω περιπτώσεις:​ 
-  * Εάν προκύψει η εξαίρεση που έχουμε φροντίσει να διαχειριστούμε (στο παρακάτω παράδειγμα FileNotFoundException).+  * Εάν προκύψει η εξαίρεση που έχουμε φροντίσει να διαχειριστούμε (στο παρακάτω παράδειγμα ​//FileNotFoundException//).
   * Εάν προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να διαχειριστούμε.   * Εάν προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να διαχειριστούμε.
   * Εάν δεν προκύψει καμία απολύτως εξαίρεση.   * Εάν δεν προκύψει καμία απολύτως εξαίρεση.
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 | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]]|
  
  
java/exceptions_try_catch_block.1455531517.txt.gz · Last modified: 2016/02/26 11:15 (external edit)