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
java:exceptions_throwing [2019/04/20 04:54]
gthanos
java:exceptions_throwing [2019/04/20 04:56] (current)
gthanos old revision restored (2017/02/16 15:08)
Line 3: Line 3:
 Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​ Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​
  
-Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ​με τη βοήθεια της κλάσης java.util.Scanner, ​ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο περιέχει αρνητικές τιμιές. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''​NegativeValueException''​. ​+Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο ​είναι άδειο, δηλ δεν ​περιέχει ​κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''​EmptyFileException''​. ​
  
-<code java NegativeValueException.java> +<code java EmptyFileException.java> 
-public class NegativeValueException ​extends java.lang.Exception { +public class EmptyFileException ​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.util.*;+import java.lang.*;
  
-public class ThrowException ​{+public class WholeFileReader ​{ 
 +   
 +  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);
-      ​sc = new Scanner(file); +      ​fReader ​= new FileReader(file); 
-      ​double sum 0.0+      ​BufferedReader in new BufferedReader(fReader)
-      ​while(sc.hasNextDouble()+      ​String inputLine;​ 
-        ​double value sc.nextDouble()+      StringBuffer strDocument = new StringBuffer()
-        if(value<​0+      try 
-          ​throw new NegativeValueException(); +        ​while ((inputLine ​in.readLine()) != null) { 
-        ​sum += sc.nextDouble();​+          ​strDocument.append(inputLine); 
 +        ​
 +        ​
       }       }
 +      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 {
-      System.out.println("​Closing ​File!"); +      ​if( fReader != null) { 
-      sc.close();+        try { 
 +          //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 {
-      ​double result = addFileContents(args[0]);​ +      System.out.println(wfr.readFile(args[0]) ​);
-      ​System.out.println("​Result is: "​+result);+
     }     }
     catch(IndexOutOfBoundsException ex) {     catch(IndexOutOfBoundsException ex) {
-      System.out.println("​No file has been specified ​from command line!\n");+      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(NegativeValueException ​ex) { +    catch(EmptyFileException ​ex) { 
-      System.out.println("​The file contains negative value");+      System.out.println("​File is empty!!!");
     }     }
   }   }
java/exceptions_throwing.1555736093.txt.gz · Last modified: 2019/04/20 04:54 by gthanos