java:exceptions_thrown_by_methods

Differences

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

Link to this comparison view

java:exceptions_thrown_by_methods [2016/02/15 11:14]
gthanos
java:exceptions_thrown_by_methods [2021/03/23 07:33]
Line 1: Line 1:
-====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== 
  
-Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στην "ιεραρχία" των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο.  
- 
-<WRAP tip 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'' στην δήλωση της μεθόδου. 
-  - Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο ''main''. 
- 
-<code java WholeFileReader.java> 
- 
-import java.io.*; 
-import java.lang.*; 
- 
-public class WholeFileReader { 
-   
-  public String readFile(String path) throws FileNotFoundException { 
-    FileReader fReader = null; 
-   
-    try { 
-      File file = new File (path); 
-      fReader = new FileReader(file); 
-      BufferedReader in = new BufferedReader(fReader); 
-      String inputLine; 
-      StringBuffer strDocument = new StringBuffer(); 
-      try { 
-        while ((inputLine = in.readLine()) != null) { 
-          strDocument.append(inputLine); 
-        } 
-         
-      } 
-      catch(IOException ex) { 
-        System.out.println("IOException occured while reading from file "+path); 
-      }       
-      return strDocument.toString(); 
-    } 
-    /* //Remove exception from here. Handle it at a higher level 
-    catch(FileNotFoundException ex) { 
-      System.out.println("The specified file was not found at "+ args[0]); 
-    }*/ 
-    finally { 
-      if( fReader != null) { 
-        try { 
-          System.out.println("Closing file"); 
-          fReader.close(); 
-        }  
-        catch(IOException ex) { 
-          System.out.println("IOException occured while closing file "+path); 
-        } 
-      } 
-    } 
-     
-  } 
-   
-  public static void main(String args[]) { 
-    WholeFileReader wfr = new WholeFileReader(); 
-    try { 
-      System.out.println(wfr.readFile(args[0]) ); 
-    } 
-    catch(IndexOutOfBoundsException ex) { 
-      System.out.println("No file has been specified!\n"); 
-    } 
-    catch(FileNotFoundException ex) { 
-      System.out.println("The specified file was not found at "+ args[0]); 
-    } 
-  } 
- 
-} 
-</code> 
- 
-Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''readFile'' αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''main'') και την διαχειριζόμαστε εκεί. Eφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου υπάρχει η επιπλέον δήλωση ''throws FileNotFoundException'', όπου περιγράφεται ποια Exceptions μπορεί να "πετάξει" η κάθε μέθοδος στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να κάνει **throw** περισσότερα του ενός Exceptions. Η δήλωση throw υποχρεώνει τον compiler να βγάλει σφάλμα 
-  * εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο με την δήλωση **throw**. 
-  * ή εάν δεν έχουμε μία δήλωση **throw** για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο. 
- 
-|Προηγούμενο: [[:java:exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | Επόμενο: [[:java:exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]| 
java/exceptions_thrown_by_methods.txt · Last modified: 2021/03/23 07:33 (external edit)