This shows you the differences between two versions of the page.
|
java:exceptions_thrown_by_methods [2020/02/27 20:30] gthanos |
java:exceptions_thrown_by_methods [2021/03/23 07:33] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== | ||
| - | |||
| - | Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στη μέθοδο που δημιουργείται ή σε κάποια άλλη μέθοδο η οποία βρίσκεται πιο πάνω στη σειρά των μεθόδων που έχουν ήδη κληθεί και βρίσκονται μέσα στην στοίβα εκτέλεσης του προγράμματος. | ||
| - | |||
| - | <WRAP info 80% center round> | ||
| - | Ας υποθέσουμε ότι έχετε τις μεθόδους **main**, **method1**, | ||
| - | * Η **main** καλεί την **method1**. | ||
| - | * Η **method1** καλεί την **method2**. | ||
| - | * Η **method2** καλεί την **method3**. | ||
| - | |||
| - | * Εάν συμβεί ένα **Exception** μέσα στη μέθοδο **method3** τότε αυτό μπορούμε να το διαχειριστούμε είτε μέσα στην **method3**, | ||
| - | * Αντίστοιχα, | ||
| - | |||
| - | Η **main** είναι η τελευταία μέθοδος στην οποία μπορεί να γίνει διαχείριση ενός exception. Εάν η διαχείριση δεν γίνει και στη main, τότε το πρόγραμμα τερματίζει εκτυπώνοντας στην κονσόλα το Exception που δημιουργήθηκε. | ||
| - | |||
| - | </ | ||
| - | |||
| - | Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο: | ||
| - | - Κατ' | ||
| - | - Στην συνέχεια κάνουμε comment-out τις γραμμές που ελέγχουν το '' | ||
| - | - Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο '' | ||
| - | |||
| - | <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(" | ||
| - | } | ||
| - | return strDocument.toString(); | ||
| - | } | ||
| - | /* //Remove exception from here. Handle it at a higher level | ||
| - | catch(FileNotFoundException ex) { | ||
| - | System.out.println(" | ||
| - | }*/ | ||
| - | finally { | ||
| - | if( fReader != null) { | ||
| - | try { | ||
| - | System.out.println(" | ||
| - | fReader.close(); | ||
| - | } | ||
| - | catch(IOException ex) { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | | ||
| - | } | ||
| - | | ||
| - | public static void main(String args[]) { | ||
| - | WholeFileReader wfr = new WholeFileReader(); | ||
| - | try { | ||
| - | System.out.println(wfr.readFile(args[0]) ); | ||
| - | } | ||
| - | catch(IndexOutOfBoundsException ex) { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | catch(FileNotFoundException ex) { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | } | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία __δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου '' | ||
| - | |||
| - | Εφόσον δεν διαχειριζόμαστε το // | ||
| - | |||
| - | <code java> | ||
| - | throws FileNotFoundException | ||
| - | </ | ||
| - | |||
| - | όπου περιγράφεται ποια // | ||
| - | |||
| - | Η δήλωση **throws** υποχρεώνει τον compiler να βγάλει σφάλμα εάν η " | ||
| - | |||
| - | |Προηγούμενο: | ||