User Tools

Site Tools


java:exceptions_thrown_by_methods

This is an old revision of the document!


Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο

Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Η Java μας δίνει την δυνατότητα να μην διαχειριστούμε την εξαίρεση μέσα στην μέθοδο που προκύπτει, αλλά να σε κάποια άλλη μέθοδο πιο πάνω που καλεί την μέθοδο που προκύπτει. Ας ξαναδούμε το προηγούμενο παράδειγμα ελαφρά παραλλαγμένο.

  1. Κατ' αρχήν διαχωρίζουμε το FileNotFoundException από to IOException σε δύο διαφορετικά try blocks.
  2. Στην συνέχεια κάνουμε comment-out τις γραμμές που ελέγχουν το FileNotFoundException και αντ' αυτού προσθέτουμε μία δήλωση throws FileNotFoundException στην δήλωση της μεθόδου.
  3. Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο main.
WholeFileReader.java
import java.io.*;
import java.lang.*;
 
public class WholeFileReader {
 
  public String readFile(String path) throws FileNotFoundException {
    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);
      }      
      return strDocument.toString();
    }
    /* //Remove exception from here. Handle it at a higher level
    catch(FileNotFoundException ex) {
      System.out.println("The specified file was not found at "+ args[0]);
    }*/
    finally {
      if( fReader != null) {
        try {
          System.out.println("Closing file");
          fReader.close();
        } 
        catch(IOException ex) {
          System.out.println("IOException occured while closing file "+path);
        }
      }
    }
 
  }
 
  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]);
    }
  }
 
}

Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία δεν διαχειριζόμαστε την εξαίρεση εντός της μεθόδου readFile αλλά αφήνουμε να περνάμε την εξαίρεση στην μέθοδο που την καλεί (στην περίπτωση μας η main) και την διαχειριζόμαστε εκεί. Eφόσον δεν διαχειριζόμαστε το Exception στην δήλωση της μεθόδου υπάρχει η επιπλέον δήλωση throws FileNotFoundException, όπου περιγράφεται ποια Exceptions μπορεί να “πετάξει” η κάθε μέθοδος στις μεθόδους που την καλούν. Μία μέθοδος μπορεί να κάνει throw περισσότερα του ενός Exceptions. Η δήλωση throw υποχρεώνει τον compiler να βγάλει σφάλμα

  • εάν δεν διαχειριστούμε τον συγκεκριμένο τύπο Exception στην μέθοδο από την οποία καλούμε την μέθοδο με την δήλωση throw.
  • ή εάν δεν έχουμε μία δήλωση throw για το συγκεκριμένο τύπο Exception στην δήλωση της μεθόδου από την οποία καλούμε την εν λόγω μέθοδο.
java/exceptions_thrown_by_methods.1425884962.txt.gz · Last modified: 2015/03/09 07:09 by gthanos