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 15:35]
gthanos [Finaly Block]
java:exceptions_intro [2015/03/02 16:46]
gthanos
Line 103: Line 103:
  
 Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''​ArithmeticException''​ και συγκεκριμένα διαίρεση με το μηδέν και θα εκτυπώσει τα σχετικά μηνύματα. Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''​ArithmeticException''​ και συγκεκριμένα διαίρεση με το μηδέν και θα εκτυπώσει τα σχετικά μηνύματα.
 +
 +Παρακάτω δίνεται το παράδειγμα μία συνάρτησης που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String.
 +
 +<code java WholeFileReader.java>​
 +import java.io.*;
 +import java.lang.*;​
 +
 +public class WholeFileReader {
 +  ​
 +  public String readFile(String path) {
 +  ​
 +    try {
 +      File file = new File (path);
 +      FileReader fReader = new FileReader(file);​
 +      BufferedReader in = new BufferedReader(fReader);​
 +      String inputLine;
 +      StringBuffer strDocument = new StringBuffer();​
 +      try {
 +        while ((inputLine = in.readLine()) != null) {
 +          strDocument.append(inputLine);​
 +        }
 +        fReader.close();​
 +      }catch(IOException ex) {
 +        System.out.println("​IOException occured while reading from file "​+path);​
 +        System.out.println("​Exiting..."​);​
 +        System.exit(1);​
 +      }
 +      return strDocument.toString();​
 +    }
 +    catch(FileNotFoundException ex) {
 +      System.out.println("​The specified file was not found at "+ path);
 +      return "";​
 +    }    ​
 +  }
 +  ​
 +  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"​);​
 +    }
 +  }
 +
 +}
 +</​code>​
  
 ==== Finaly Block ==== ==== Finaly Block ====
  
-Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα finaly block το οποίο θα εκτελεστεί σε κάθε περίπτωση. Το finaly block θα εκτελεστεί ακόμη και σε περίπτωση που προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να συμπεριλάβουμε ή δεν προκύψει καμία εξαίρεση.+Εκτός από τα **catch** blocks τα οποία εκτελούνται όταν έχουμε κάποιο exception, μπορούμε να προσθέσουμε ένα finaly block το οποίο θα εκτελεστεί ​__σε κάθε περίπτωση__. Το finaly block θα εκτελεστεί ακόμη και σε περίπτωση που προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να συμπεριλάβουμε ή εάν ​δεν προκύψει καμία ​απολύτως ​εξαίρεση.
  
 <code java> <code java>
-try { 
  
-  File file = new File ("​C:/​Users/​Me/​Desktop/​directory/​file.txt")+import java.io.*
-  ​PrintWriter printWriter = new PrintWriter (file); +import java.lang.*;
-  printWriter.println ("​hello"​);​ +
-  printWriter.close ();+
  
-} catch (IndexOutOfBoundsException e) { +public class WholeFileReader { 
-    System.err.println("​IndexOutOfBoundsException: ​" + e.getMessage()); +   
-} catch (IOException ​e) { +  public String readFile(String path) { 
-    System.err.println("​Caught ​IOException" + e.getMessage()); +   
-}finally { +    try { 
-    ​if (out != null) {  +      File file = new File (path); 
-        System.out.println("​Closing PrintWriter"); +      FileReader fReader = new FileReader(file);​ 
-        out.close();  +      BufferedReader in = new BufferedReader(fReader);​ 
-    } else {  +      String inputLine;​ 
-        System.out.println("​PrintWriter not open"); +      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); 
 +      } 
 +      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); 
 +          } 
 +        } 
 +      } 
 +      return strDocument.toString();​ 
 +    ​
 +    catch(FileNotFoundException ex) { 
 +      System.out.println("​The specified file was not found at "+ path); 
 +      ​return "";​ 
 +    }     
 +  } 
 +   
 +  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"); 
 +    } 
 +  }
  
 +}
 </​code>​ </​code>​
  
-Ένας ​λόγος που μπορούμε να χρησιμοποιήσουμε το finaly block είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί σε όλες τις περιπτώσεις,​ όπως για παράδειγμα να κλείσουμε ελεγχόμενα τα αρχεία του προγράμματος. Στο παραπάνω παράδειγμα υπάρχει ολοκληρωμένο ένα μικρό τμήμα κώδικα που ανοίγει ένα αρχείο,​ γράφει κάτι και μετά το κλείνει το αρχείο που άνοιξε.+Ο λόγος που μπορούμε να χρησιμοποιήσουμε το finaly block είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί σε όλες τις περιπτώσεις,​ όπως για παράδειγμα να κλείσουμε ελεγχόμενα τα αρχεία του προγράμματος. Στο παραπάνω παράδειγμα υπάρχει ολοκληρωμένο ένα μικρό τμήμα κώδικα που ανοίγει ένα αρχείο,​ γράφει κάτι και μετά το κλείνει το αρχείο που άνοιξε ​προηγούμενα.
 ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ======
 Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Υπάρχει ένας μηχανισμός που μας επιτρέπει να μην χειριστούμε την εξαίρεση στο σημείο που προκύπτει αλλά στο σημείο που καλείται η μέθοδος μεσα στην οποία θα προκύψει μια εξαίρεση. Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Υπάρχει ένας μηχανισμός που μας επιτρέπει να μην χειριστούμε την εξαίρεση στο σημείο που προκύπτει αλλά στο σημείο που καλείται η μέθοδος μεσα στην οποία θα προκύψει μια εξαίρεση.
java/exceptions_intro.txt · Last modified: 2019/04/20 05:02 by gthanos