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 [2016/02/15 11:14]
gthanos
java:exceptions_thrown_by_methods [2017/02/16 15:08] (current)
gthanos
Line 3: Line 3:
 Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στην "​ιεραρχία"​ των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​ Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στην "​ιεραρχία"​ των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​
  
-<​WRAP ​tip 80% center round>+<​WRAP ​info 80% center round>
 Ας υποθέσουμε ότι έχετε τις μεθόδους **main**, **method1**,​ **method2**,​ **method3** όπου η ιεραρχία κλήσεων μεταξύ τους είναι η εξής: Ας υποθέσουμε ότι έχετε τις μεθόδους **main**, **method1**,​ **method2**,​ **method3** όπου η ιεραρχία κλήσεων μεταξύ τους είναι η εξής:
   * Η **main** καλεί την **method1**.   * Η **main** καλεί την **method1**.
   * Η **method1** καλεί την **method2**.   * Η **method1** καλεί την **method2**.
   * Η **method2** καλεί την **method3**.   * Η **method2** καλεί την **method3**.
-Εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method3** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method3**,​ είτε μέσα στις **method2**,​ **method1** και **main**. ​Εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method2** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method2**,​ είτε μέσα στις **method1** και **main**. Η **main** είναι η τελευταία ​συνάρτηση ​στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε.+ 
 +  * Εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method3** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method3**,​ είτε μέσα στις **method2**,​ **method1** και **main**. ​ 
 +  * Αντίστοιχα,​ εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method2** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method2**,​ είτε μέσα στις **method1** και **main**. ​ 
 + 
 +Η **main** είναι η τελευταία ​μέθοδος ​στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε. 
 </​WRAP>​ </​WRAP>​
  
Line 76: 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.1455534860.txt.gz · Last modified: 2016/02/26 11:15 (external edit)