java:exceptions_thrown_by_methods2

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στην "ιεραρχία" των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος μας. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. <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> Πάνω στο προηγούμενο πρόγραμμα θα γράψουμε την εξής παραλλαγή. Αντί για το διάβασμα ενός αρχείου από την γραμμή εντολών θα έχουμε περισσότερα του ενός αρχεία. Δημιουργούμε την ενδιάμεση μέθοδο **sumMultipleFileContents** η οποία λαμβάνει ένα πίνακα από Strings, κάθε ένα εκ των οποίων αντιστοιχεί σε ένα όνομα αρχείου. Με τη βοήθεια της μεθόδου **sumFileContents** επιστρέφει το συνολικό άθροισμα των επιμέρους αρχείων. **Παρατηρήστε ότι** η μέθοδος **sumFileContents** παράγει μία εξαίρεση τύπου FileNotFoundException την οποία δεν διαχειρίζεται αλλά προωθεί στη μέθοδο που την καλεί. Η προώθηση γίνεται μέσω της δήλωσης ''throws FileNotFoundException'' στο prototype της μεθόδου **sumFileContents**. <code java ReadMultipleFiles.java> 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<args.length; i++) sum += sumFileContents(args[i]); return sum; } public static void main(String args[]) { try { double result = sumMultipleFileContents(args); System.out.println("Result is: "+result); } catch(IndexOutOfBoundsException ex) { System.out.println("No file has been specified from command line!\n"); } catch(FileNotFoundException ex) { System.out.println("One of the specified files was not found!"); } } } </code> |Προηγούμενο: [[:java:exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:exceptions_throwing | Δημιουργία και πυροδότηση εξαίρεσης ]]|

java/exceptions_thrown_by_methods2.1555735718.txt.gz · Last modified: 2019/04/20 04:48 by gthanos