User Tools

Site Tools


java:exceptions_throwing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:exceptions_throwing [2020/04/30 10:50] – [Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης] gthanosjava:exceptions_throwing [2021/03/23 07:34] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης ====== ====== Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης ======
  
-Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;+Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις της βασικής βιβλιοθήκης. Πως όμως δημιουργούνται νέοι τύποι εξαιρέσεων και πως και εμείς μπορούμε να πυροδοτήσουμε μια εξαίρεση;
  
-Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο είναι άδειο, δηλ δεν περιέχει κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''EmptyFileException''. Για να δημιουργήσετε μία νέα κλάση που περιγράφει μία εξαίρεση αρκεί αυτή να είναι απόγονος της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html|java.lang.Exception]].+Επανερχόμενοι στο προηγούμενο παράδειγμα, θα δημιουργήσουμε μία νέα κλάση απόγονο της κλάσης [[https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html|java.lang.Exception]].
  
-<code java EmptyFileException.java> +<code java AbnormalSituationException.java> 
-public class EmptyFileException extends java.lang.Exception {+public class AbnormalSituationException extends java.lang.Exception { 
 +   String msg = "Hello!"; 
 +   public AbnormalSituationException(String msg) { 
 +     this.msg = msg; 
 +   } 
 +   @Override 
 +   public String toString() { 
 +     return "[MyException] "+msg; 
 +   }
 } }
 </code> </code>
  
-===== Παραγωγή εξαίρεσης =====+Κατά την ανάγνωση από την γραμμή εντολών, εφόσον συμβεί ένα λάθος θα διαχειριστούμε την εξαίρεση που προκύπτει και στη συνέχεια θα παράγουμε ένα αντικείμενο της παραπάνω εξαίρεσης του οποίου η διαχείριση θα γίνει στη main.
  
-Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο__Για να παράγουμε μία εξαίρεση πρέπει να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε__Στο παρακάτω παράδειγμα, εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ήταν κενό τότε το πρόγραμμα μας δημιουργεί μία εξαίρεση του τύπου **EmptyFileException**Δείτε τον κώδικα.+<code java ExceptionHandling.java> 
 +import java.util.Scanner; 
 +import java.util.NoSuchElementException; 
 +import java.util.InputMismatchException;
  
-<code java WholeFileReader.java> +public class ExceptionHandling 
-import java.io.*; +    
-import java.lang.*; +  public static int readInt(Scanner sc) throws AbnormalSituationException {
- +
-public class WholeFileReader +
-   +
-  public String readFile(String path) throws FileNotFoundException, EmptyFileException { +
-    FileReader fReader = null; +
-  +
     try {     try {
-      File file = new File (path); +      return sc.nextInt();       
-      fReader = new FileReader(file); +    } catch(NoSuchElementException ex) { 
-      BufferedReader in = new BufferedReader(fReader); +      throw new AbnormalSituationException("Something bad happened!");
-      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); +
-      +
-      if( strDocument.toString().isEmpty() ) { +
-         throw new EmptyFileException(); +
-      } +
-      return strDocument.toString();+
     }     }
-     
-    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); 
-        } 
-      } 
-    } 
-     
   }   }
      
-  public static void main(String args[]) { +  public static double getRatio(Scanner scthrows AbnormalSituationException 
-    WholeFileReader wfr = new WholeFileReader(); +    System.out.println("Width: "); 
-    try { +    int width = readInt(sc); 
-      System.out.println(wfr.readFile(args[0]) ); +    System.out.println("Height: "); 
-    } +    int height = readInt(sc); 
-    catch(IndexOutOfBoundsException ex) { +    return width / (double)height; 
-      System.out.println("No file has been specified!\n"); +  } 
-    } +   
-    catch(FileNotFoundException ex) { +  public static void main(String []args) { 
-      System.out.println("The specified file was not found at "+ args[0]); +    double ratio = -1.0; 
-    } +    try (Scanner sc = new java.util.Scanner(System.in)){ 
-    catch(EmptyFileException ex{ +      ratio = getRatio(sc); 
-      System.out.println("File is empty!!!");+      System.out.format("Ratio: %.2f", ratio); 
 +    } catch(AbnormalSituationException ex) { 
 +      System.out.println(ex); 
 +      StackTraceElement[] st = ex.getStackTrace(); 
 +      for(StackTraceElement e: st
 +        System.out.println(e);
     }     }
   }   }
- 
 } }
 </code> </code>
  
-|Προηγούμενο: [[:java:exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]] | [[ :toc | Περιεχόμενα ]]  | Επόμενο: [[:java:exceptions_try_with_resources | try-with-resources block ]]|+ 
 +|Προηγούμενο: [[:java:exceptions_thrown_by_methods | Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ]] | [[ :toc | Περιεχόμενα ]]  | Επόμενο: [[:java:exceptions_try_with_resources | Δημιουργία Αντικειμένων και Εξαιρέσεις ]]|
  
java/exceptions_throwing.1588243805.txt.gz · Last modified: 2020/04/30 09:50 (external edit)