java:exceptions_throwing2

Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης

Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;

Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου με τη βοήθεια της κλάσης java.util.Scanner, ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο περιέχει αρνητικές τιμιές. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα NegativeValueException.

NegativeValueException.java
public class NegativeValueException extends java.lang.Exception {
 
}

Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη throw και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε. Στο παρακάτω παράδειγμα, εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε περιέχει αρνητική τιμή, τότε το πρόγραμμα μας δημιουργεί το παραπάνω Exception. Δείτε τον κώδικα.

ThrowException.java
import java.io.*;
import java.util.*;
 
public class ThrowException {
 
  public static double addFileContents(String path) throws NegativeValueException {
 
    Scanner sc=null;
 
    try {
      File file = new File (path);
      sc = new Scanner(file);
      double sum = 0.0;
      while(sc.hasNextDouble()) {
        double value = sc.nextDouble();
        if(value<0)
          throw new NegativeValueException();
        sum += sc.nextDouble();
      }
    }
    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 {
      System.out.println("Closing File!");
      sc.close();
    }
    return 0.0;
  }
 
  public static void main(String args[]) {
    try {
      double result = addFileContents(args[0]);
      System.out.println("Result is: "+result);
    }
    catch(IndexOutOfBoundsException ex) {
      System.out.println("No file has been specified from command line!\n");
    }
    catch(NegativeValueException ex) {
      System.out.println("The file contains negative value");
    }
  }
 
}
java/exceptions_throwing2.txt · Last modified: 2019/04/20 05:05 by gthanos