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:15]
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**.
Line 12: Line 12:
   * Αντίστοιχα,​ εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method2** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method2**,​ είτε μέσα στις **method1** και **main**. ​   * Αντίστοιχα,​ εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method2** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method2**,​ είτε μέσα στις **method1** και **main**. ​
  
-Η **main** είναι η τελευταία ​συνάρτηση ​στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε.+Η **main** είναι η τελευταία ​μέθοδος ​στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε.
  
 </​WRAP>​ </​WRAP>​
Line 81: Line 81:
 </​code>​ </​code>​
  
-Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''​main''​) και την διαχειριζόμαστε εκεί. ​Eφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου ​υπάρχει η επιπλέον δήλωση ''​throws FileNotFoundException'',​ όπου περιγράφεται ποια Exceptions μπορεί να "πετάξει" η κάθε μέθοδος στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να κάνει **throw** περισσότερα ​του ενός Exceptions. Η δήλωση throw υποχρεώνει τον compiler ​να βγάλει σφάλμα +Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''​main''​) και την διαχειριζόμαστε εκεί. ​Εφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδουείναι ​υποχρεωτικό από τον ​compiler της Java να προσθέσουμε την επιπλέον δήλωση ​
-  * εάν δεν διαχειριστούμε τον ​συγκεκριμένο τύπο Exception ​στην μέθοδο από την οποία καλούμε την ​μέθοδο με την δήλωση **throw**. +
-  * ή εάν δεν ​έχουμε μία δήλωση **throw** για το συγκεκριμένο τύπο Exception στην δήλωση ​της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο.+
  
-|Προηγούμενο:​ [[:​java:​exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | Επόμενο:​ [[:​java:​exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]|+<code java> 
 +throws FileNotFoundException 
 +</​code>​ 
 + 
 +όπου περιγράφεται ποια Exceptions μπορεί να μην ​ διαχειριστεί μία μέθοδος και να αφήσει την διαχείριση τους στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να μην διαχειριστεί και να αφήσει προς διαχείριση στις μεθόδους που την καλούν περισσότερα του ενός Exceptions.  
 + 
 +Η δήλωση **throws** υποχρεώνει τον compiler να βγάλει σφάλμα:​ 
 +  * εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο που περιέχει τη δήλωση **throw**. 
 +  * ή εάν δεν έχουμε μία δήλωση **throws** για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο. 
 + 
 +|Προηγούμενο:​ [[:​java:​exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ​]] | [[ :toc | Περιεχόμενα ​]] | Επόμενο:​ [[:​java:​exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]|
java/exceptions_thrown_by_methods.1455534951.txt.gz · Last modified: 2016/02/26 11:15 (external edit)