====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στην "ιεραρχία" των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. Ας υποθέσουμε ότι έχετε τις μεθόδους **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 που δημιουργήθηκε. Πάνω στο προηγούμενο πρόγραμμα θα γράψουμε την εξής παραλλαγή. Αντί για το διάβασμα ενός αρχείου από την γραμμή εντολών θα έχουμε περισσότερα του ενός αρχεία. Δημιουργούμε την ενδιάμεση μέθοδο **sumMultipleFileContents** η οποία λαμβάνει ένα πίνακα από Strings, κάθε ένα εκ των οποίων αντιστοιχεί σε ένα όνομα αρχείου. Με τη βοήθεια της μεθόδου **sumFileContents** επιστρέφει το συνολικό άθροισμα των επιμέρους αρχείων. **Παρατηρήστε ότι** η μέθοδος **sumFileContents** παράγει μία εξαίρεση τύπου [[http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html|FileNotFoundException]] την οποία δεν διαχειρίζεται αλλά προωθεί στη μέθοδο που την καλεί. Η προώθηση γίνεται μέσω της δήλωσης ''throws FileNotFoundException'' στο prototype της μεθόδου **sumFileContents**. Με τη σειρά της η μέθοδος **sumMultipleFileContents** κάνει το ίδιο προωθώντας το συγκεκριμένο //exception// στη μέθοδο **main** Η οποία τελικά το διαχειρίζεται. import java.io.*; import java.util.*; public class ReadMultipleFiles { public static double sumFileContents(String path) throws FileNotFoundException { Scanner sc=null; try { File file = new File (path); sc = new Scanner(file); double double1 = sc.nextDouble(); double double2 = sc.nextDouble(); return double1 + double2; } catch(NoSuchElementException ex) { System.out.println("The specified type of element was not found!"); } finally { System.out.println("Closing File!"); sc.close(); } return 0.0; } public static double sumMultipleFileContents(String []args) throws FileNotFoundException { double sum; sum = sumFileContents(args[0]); for(int i=1; i |Προηγούμενο: [[:java:exceptions_try_catch_block2| Διαχείριση Εξαιρέσεων ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:exceptions_throwing2 | Δημιουργία και πυροδότηση εξαίρεσης ]]|