java:exceptions_throwing

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
Last revision Both sides next revision
java:exceptions_throwing [2016/02/26 11:15]
127.0.0.1 external edit
java:exceptions_throwing [2019/04/20 04:54]
gthanos
Line 3: Line 3:
 Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​ Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​
  
-Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο ​είναι άδειο, δηλ δεν ​περιέχει ​κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''​EmptyFileException''​. ​+Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ​με τη βοήθεια της κλάσης java.util.Scanner, ​ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο περιέχει αρνητικές τιμιές. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''​NegativeValueException''​. ​
  
-<code java EmptyFileException.java> +<code java NegativeValueException.java> 
-public class EmptyFileException ​extends java.lang.Exception {+public class NegativeValueException ​extends java.lang.Exception { 
 +  ​
 } }
 </​code>​ </​code>​
  
-Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε. Στο παρακάτω παράδειγμα,​ εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ​ήταν κενό ​τότε το πρόγραμμα μας δημιουργεί το παραπάνω Exception. Δείτε τον κώδικα.+Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε. Στο παρακάτω παράδειγμα,​ εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ​περιέχει ​αρνητική τιμή, ​τότε το πρόγραμμα μας δημιουργεί το παραπάνω Exception. Δείτε τον κώδικα. 
 + 
 +<code java ThrowException.java>​
  
-<code java WholeFileReader.java>​ 
 import java.io.*; import java.io.*;
-import java.lang.*;+import java.util.*;
  
-public class WholeFileReader ​{ +public class ThrowException ​{
-   +
-  public String readFile(String path) throws FileNotFoundException,​ EmptyFileException { +
-    FileReader fReader = null;+
   ​   ​
 +  public static double addFileContents(String path) throws NegativeValueException {
 +    ​
 +    Scanner sc=null;
 +
     try {     try {
       File file = new File (path);       File file = new File (path);
-      ​fReader ​= new FileReader(file); +      ​sc = new Scanner(file); 
-      ​BufferedReader in new BufferedReader(fReader)+      ​double sum 0.0
-      ​String inputLine;​ +      ​while(sc.hasNextDouble()
-      StringBuffer strDocument = new StringBuffer()+        ​double value sc.nextDouble()
-      try +        if(value<​0
-        ​while ((inputLine ​in.readLine()) != null) { +          ​throw new NegativeValueException(); 
-          ​strDocument.append(inputLine); +        ​sum += sc.nextDouble();​
-        ​+
-        ​+
       }       }
-      catch(IOException ex) { 
-        System.out.println("​IOException occured while reading from file "​+path);​ 
-      } 
-      if( strDocument.toString().isEmpty() ) { 
-         throw new EmptyFileException();​ 
-      } 
-      return strDocument.toString();​ 
     }     }
-    ​+    ​catch(FileNotFoundException ex) { 
 +      System.out.println("​The specified file was not found at "+ path); 
 +    } 
 +    catch(NoSuchElementException ex) { 
 +      System.out.println("​The specified type of element was not found!"​);​ 
 +    }
     finally {     finally {
-      ​if( fReader != null) { +      System.out.println("​Closing ​File!"); 
-        try { +      sc.close();
-          //System.out.println("​Closing ​file"); +
-          ​fReader.close(); +
-        }  +
-        catch(IOException ex) { +
-          System.out.println("​IOException occured while reading from file "​+path);​ +
-        } +
-      }+
     }     }
-    ​+    ​return 0.0;
   }   }
   ​   ​
   public static void main(String args[]) {   public static void main(String args[]) {
-    WholeFileReader wfr = new WholeFileReader();​ 
     try {     try {
-      System.out.println(wfr.readFile(args[0]) ​);+      ​double result = addFileContents(args[0]);​ 
 +      ​System.out.println("​Result is: "​+result);
     }     }
     catch(IndexOutOfBoundsException ex) {     catch(IndexOutOfBoundsException ex) {
-      System.out.println("​No file has been specified!\n"​); +      System.out.println("​No file has been specified ​from command line!\n");
-    } +
-    catch(FileNotFoundException ex) { +
-      System.out.println("​The specified file was not found at "+ args[0]);+
     }     }
-    catch(EmptyFileException ​ex) { +    catch(NegativeValueException ​ex) { 
-      System.out.println("​File is empty!!!");+      System.out.println("​The file contains negative value");
     }     }
   }   }
Line 75: Line 64:
 </​code>​ </​code>​
  
-|Προηγούμενο:​ [[:​java:​exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]] | Επόμενο:​ [[:​java:​exceptions_try_with_resources | try-with-resources block ]]|+|Προηγούμενο:​ [[:​java:​exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]] | [[ :toc | Περιεχόμενα ]] |  ​Επόμενο:​ [[:​java:​exceptions_try_with_resources | try-with-resources block ]]|
  
java/exceptions_throwing.txt · Last modified: 2019/04/20 04:56 by gthanos