java:exceptions_thrown_by_methods

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_thrown_by_methods [2015/03/09 07:09]
gthanos
java:exceptions_thrown_by_methods [2017/02/16 15:08] (current)
gthanos
Line 1: Line 1:
 ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ======
  
-Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που ​προκύπτει, αλλά να σε κάποια άλλη μέθοδο πιο πάνω που καλεί την ​μέθοδο που προκύπτει. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​+Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που ​δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται ​πιο πάνω ​στην "​ιεραρχία"​ των μεθόδων ​που ​έχουν ήδη ​κληθεί και βρίσκονται μέσα στην ​στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​
  
-  ​- Κατ'​ αρχήν διαχωρίζουμε το ''​FileNotFoundException''​ από ​to ''​IOException''​ σε δύο διαφορετικά try blocks.+<WRAP info 80% center round> 
 +Ας υποθέσουμε ότι έχετε τις μεθόδους **main**, **method1**,​ **method2**,​ **method3** όπου η ιεραρχία κλήσεων μεταξύ τους είναι η εξής: 
 +  * Η **main** καλεί την **method1**. 
 +  * Η **method1** καλεί την **method2**. 
 +  * Η **method2** καλεί την **method3**. 
 + 
 +  * Εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method3** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method3**,​ είτε μέσα στις **method2**,​ **method1** και **main**.  
 +  * Αντίστοιχα,​ εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method2** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method2**,​ είτε μέσα στις **method1** και **main**.  
 + 
 +Η **main** είναι η τελευταία μέθοδος στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε. 
 + 
 +</​WRAP>​ 
 + 
 +  ​- Κατ'​ αρχήν διαχωρίζουμε το ''​FileNotFoundException''​ από ​το ''​IOException''​ σε δύο διαφορετικά try blocks.
   - Στην συνέχεια κάνουμε comment-out τις γραμμές που ελέγχουν το ''​FileNotFoundException''​ και αντ'​ αυτού προσθέτουμε μία δήλωση ''​throws FileNotFoundException''​ στην δήλωση της μεθόδου.   - Στην συνέχεια κάνουμε comment-out τις γραμμές που ελέγχουν το ''​FileNotFoundException''​ και αντ'​ αυτού προσθέτουμε μία δήλωση ''​throws FileNotFoundException''​ στην δήλωση της μεθόδου.
   - Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο ''​main''​.   - Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο ''​main''​.
Line 68: Line 81:
 </​code>​ </​code>​
  
-Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''​main''​) και την διαχειριζόμαστε εκεί. ​Eφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου υπάρχει η επιπλέον δήλωση ​''​throws FileNotFoundException'', ​όπου περιγράφεται ποια Exceptions μπορεί να ετάξει"​ η κάθε μέθοδος στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να κάνει ​**throw** ​περισσότερα του ενός Exceptions. Η δήλωση ​throw υποχρεώνει τον compiler να βγάλει σφάλμα +Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''​main''​) και την διαχειριζόμαστε εκεί. ​Εφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου, είναι ​υποχρεωτικό από τον compiler της Java να προσθέσουμε την ​επιπλέον δήλωση ​ 
-  * εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο ​με την δήλωση **throw**. + 
-  * ή εάν δεν έχουμε μία δήλωση **throw** για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο.+<code java> 
 +throws FileNotFoundException 
 +</​code>​ 
 + 
 +όπου περιγράφεται ποια Exceptions μπορεί να μην ​ διαχειριστεί μία ​μέθοδος και να αφήσει την διαχείριση τους στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να μην διαχειριστεί ​και να αφήσει προς διαχείριση στις μεθόδους που την καλούν ​περισσότερα του ενός Exceptions. ​ 
 + 
 +Η δήλωση ​**throws** ​υποχρεώνει τον compiler να βγάλει σφάλμα: 
 +  * εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο ​που περιέχει ​τη δήλωση **throw**. 
 +  * ή εάν δεν έχουμε μία δήλωση **throws** για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο.
  
-|Προηγούμενο:​ [[:​java:​exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | Επόμενο:​ [[:​java:​exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]|+|Προηγούμενο:​ [[:​java:​exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ​]] | [[ :toc | Περιεχόμενα ​]] | Επόμενο:​ [[:​java:​exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]|
java/exceptions_thrown_by_methods.1425884962.txt.gz · Last modified: 2016/02/26 11:15 (external edit)