java:exceptions_intro

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
Next revision Both sides next revision
java:exceptions_intro [2015/03/03 07:20]
gthanos [Πυροδότηση μιας εξαίρεσης]
java:exceptions_intro [2015/03/03 07:56]
gthanos [Πυροδότηση μιας εξαίρεσης]
Line 269: Line 269:
 Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που προκύπτει,​ αλλά να σε κάποια άλλη μέθοδο πιο πάνω που καλεί την μέθοδο που προκύπτει. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​ Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που προκύπτει,​ αλλά να σε κάποια άλλη μέθοδο πιο πάνω που καλεί την μέθοδο που προκύπτει. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο. ​
  
-Σε προηγούμενο παράδειγμα αναφερθήκαμε ​στη PrintWriter class και βάλαμε ένα ​try-catch block για να διαχειριστούμε τη πιθανή δημιουργία μας εξαίρεσης+  - Κατ'​ αρχήν διαχωρίζουμε το ''​FileNotFoundException''​ από to ''​IOException''​ σε δύο ​διαφορετικά try blocks. 
 +  - Στην συνέχεια κάνουμε comment-out ​τις γραμμές που ​ελέγχουν το ''​FileNotFoundException''​ και αντ' ​αυτού προσθέτουμε μία δήλωση ''​throws FileNotFoundException''​ στην δήλωση της ​μεθόδου
 +  - Τέλος διαχειριζόμαστε την ​εξαίρεση ​μέσα στη μέθοδο ''​main''​.
  
 <code java> <code java>
Line 295: Line 297:
       catch(IOException ex) {       catch(IOException ex) {
         System.out.println("​IOException occured while reading from file "​+path);​         System.out.println("​IOException occured while reading from file "​+path);​
-        System.out.println("​Exiting..."​);​ 
-        System.exit(1);​ 
       }      ​       }      ​
       return strDocument.toString();​       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 {     finally {
       if( fReader != null) {       if( fReader != null) {
Line 308: Line 311:
         }          } 
         catch(IOException ex) {         catch(IOException ex) {
-          System.out.println("​IOException occured while reading from file "+path); +          System.out.println("​IOException occured while closing ​file "​+path);​
-          System.out.println("​Exiting..."​);​ +
-          System.exit(1);+
         }         }
       }       }
Line 333: Line 334:
 </​code>​ </​code>​
  
-Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία δεν διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η main) και την διαχειριζόμαστε εκεί. ​Παρατηρήστε ότι εφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου υπάρχει η επιπλέον δήλωση ''​throws FileNotFoundException'',​ όπου περιγράφεται ποιά Exceptions μπορεί να "​πετάξει"​ η μέθοδος στις μεθόδους που την καλού. Μία μέθοδος μπορεί να κάνει throw περισσότερα του ενός Exceptions.+Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία ​__δεν__ διαχειριζόμαστε την εξαίρεση εντός της μεθόδου ''​readFile''​ αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η ''​main''​) και την διαχειριζόμαστε εκεί. ​Eφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου υπάρχει η επιπλέον δήλωση ''​throws FileNotFoundException'',​ όπου περιγράφεται ποια Exceptions μπορεί να "​πετάξει"​ η κάθε ​μέθοδος στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να κάνει ​**throw** περισσότερα του ενός Exceptions. Η δήλωση throw υποχρεώνει τον compiler να βγάλει σφάλμα 
 +  * εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο με την δήλωση **throw**. 
 +  * ή εάν δεν έχουμε μία δήλωση **throw** για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο.
  
-====== ​Πυροδότηση ​μιας ​εξαίρεσης ======+====== ​Δημιουργία ενός νέου τύπου εξαίρεσης και πυροδότηση εξαίρεσης ======
 Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​ Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​
  
java/exceptions_intro.txt · Last modified: 2019/04/20 05:02 by gthanos