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/02 17:07]
gthanos [Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο]
java:exceptions_intro [2015/03/03 06:04]
gthanos [Τι είναι η εξαίρεση (Exception);]
Line 1: Line 1:
 ====== Τι είναι η εξαίρεση (Exception);​ ====== ====== Τι είναι η εξαίρεση (Exception);​ ======
  
-Όπως αναφέρει και το όνομα ​της συγκεκριμένης ενότητας, θα αναφερθούμε σε αντικείμενα τα οποία δημιουργούνται κατά την ροή εκτέλεσης ενός προγράμματος,​ όταν συμβαίνει κάτι αναπάντεχο ή μη διαχειρίσιμο από το πρόγραμμα. Σε αυτές της περιπτώσεις παράγεται ένα νέο αντικείμενο που ονομάζεται "​εξαίρεση"​ (exception),​ με παράλληλη διακοπή της κανονικής ροής του προγράμματος μας. Ο προγραμματιστής καλείται να διαχειριστεί μέσα από επιπλέον κώδικα τις εξαιρέσεις αυτές, και ​να αντιμετωπίσει τα γεγονότα από τα οποία προέρχονται.+Σε αυτή την ενότητα θα αναφερθούμε σε αντικείμενα τα οποία δημιουργούνται κατά την ροή εκτέλεσης ενός προγράμματος,​ όταν συμβαίνει κάτι αναπάντεχο ή μη διαχειρίσιμο από το πρόγραμμα. Σε αυτές της περιπτώσεις παράγεται ένα νέο αντικείμενο που ονομάζεται "​εξαίρεση"​ (exception),​ με παράλληλη διακοπή της κανονικής ροής του προγράμματος. Ο προγραμματιστής καλείται να διαχειριστεί μέσα από επιπλέον κώδικα τις πιθανές εξαιρέσεις,​ και ​κατ' ​επέκταση να διαχειριστεί ομαλά ​τα γεγονότα από τα οποία προέρχονται.
  
-Για να διασφαλίσουμε ​οτι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός,​ χρησιμοποιούμε τον μηχανισμό ​της ​διαχείρισης των **εξαιρέσεων (exceptions)**. Το βασικό πλεονέκτημα που μας προσδίδει η χρήση των εξαιρέσεων είναι το γεγονός ότι μπορούμε να επιλέξουμε σε ποιο σημείο του προγράμματος θα διαχειριστούμε την εξαίρεση που έχει προκύψει.+Για να διασφαλίσουμε ​ότι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός,​ χρησιμοποιούμε τον μηχανισμό διαχείρισης των **εξαιρέσεων (exceptions)**. Το βασικό πλεονέκτημα που μας προσδίδει η χρήση των εξαιρέσεων είναι το γεγονός ότι μπορούμε να επιλέξουμε σε ποιο σημείο του προγράμματος θα διαχειριστούμε την εξαίρεση που έχει προκύψει.
  
  
Line 104: Line 104:
 Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''​ArithmeticException''​ και συγκεκριμένα διαίρεση με το μηδέν και θα εκτυπώσει τα σχετικά μηνύματα. Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''​ArithmeticException''​ και συγκεκριμένα διαίρεση με το μηδέν και θα εκτυπώσει τα σχετικά μηνύματα.
  
-Παρακάτω δίνεται το παράδειγμα μία ​συνάρτησης ​που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String.+Παρακάτω δίνεται το παράδειγμα μία ​μεθόδου που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String.
  
 <code java WholeFileReader.java>​ <code java WholeFileReader.java>​
Line 308: Line 308:
  
 Στο παραπάνω παράδειγμα έχουμε δημιουργήσει μια μέθοδο η οποία βγάζει ένα αντικείμενο απο μια stack και το επιστρέφει. Θέλουμε σε περίπτωση που δεν υπάρχει κάποιο αντικείμενο στη stack και καλέσουμε pop να πυροδοτηθεί μια εξαίρεση. ​ Στο παραπάνω παράδειγμα έχουμε δημιουργήσει μια μέθοδο η οποία βγάζει ένα αντικείμενο απο μια stack και το επιστρέφει. Θέλουμε σε περίπτωση που δεν υπάρχει κάποιο αντικείμενο στη stack και καλέσουμε pop να πυροδοτηθεί μια εξαίρεση. ​
 +
 +Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο είναι άδειο, δηλ δεν περιέχει κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''​EmptyFileException''​. ​
 +
 +<code java EmptyFileException.java>​
 +public class EmptyFileException extends java.lang.Exception {
 +}
 +</​code>​
 +
 +Στην συνέχεια εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ήταν κενό τότε το πρόγραμμα μας πετάει το παραπάνω Exception. Δείτε τον κώδικα.
 +<code java >
 +import java.io.*;
 +import java.lang.*;​
 +
 +public class WholeFileReader {
 +  ​
 +  public String readFile(String path) throws FileNotFoundException,​ EmptyFileException {
 +    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);​
 +        System.out.println("​Exiting..."​);​
 +        System.exit(1);​
 +      }
 +      if( strDocument.toString().isEmpty() ) {
 +         throw new EmptyFileException();​
 +      }
 +      return strDocument.toString();​
 +    }
 +    ​
 +    finally {
 +      if( fReader != null) {
 +        try {
 +          //​System.out.println("​Closing file"​);​
 +          fReader.close();​
 +        } 
 +        catch(IOException ex) {
 +          System.out.println("​IOException occured while reading from file "​+path);​
 +          System.out.println("​Exiting..."​);​
 +          System.exit(1);​
 +        }
 +      }
 +    }
 +    ​
 +  }
 +  ​
 +  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]);
 +    }
 +    catch(EmptyFileException ex) {
 +      System.out.println("​File is empty!!!"​);​
 +    }
 +  }
 +
 +}
 +</​code>​
  
  
java/exceptions_intro.txt · Last modified: 2019/04/20 05:02 by gthanos