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
Next revision Both sides next revision
java:exceptions_throwing [2015/03/09 07:23]
gthanos
java:exceptions_throwing [2021/03/22 19:44]
gthanos
Line 1: Line 1:
 ====== Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης ====== ====== Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης ======
  
-Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;+Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις της βασικής βιβλιοθήκης. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;
  
-Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο είναι άδειο, δηλ δεν περιέχει κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα ''EmptyFileException''+Επανερχόμενοι στο προηγούμενο παράδειγμα, θα δημιουργήσουμε μία νέα κλάση απόγονο της κλάσης [[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>
  
-Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε. Στο παρακάτω παράδειγμα, εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ήταν κενό τότε το πρόγραμμα μας δημιουργεί το παραπάνω Exception. Δείτε τον κώδικα.+Κατά την ανάγνωση από την γραμμή εντολών, εφόσον συμβεί ένα λάθος θα διαχειριστούμε την εξαίρεση που προκύπτει και στη συνέχεια θα παράγουμε ένα αντικείμενο της παραπάνω εξαίρεσης του οποίου η διαχείριση θα γίνει στη main. 
 + 
 +<code java ExceptionHandling.java> 
 +import java.util.Scanner; 
 +import java.util.NoSuchElementException; 
 +import java.util.InputMismatchException; 
 + 
 +public class ExceptionHandling { 
 +    
 +  public static int readInt(Scanner sc) throws AbnormalSituationException { 
 +    try { 
 +      return sc.nextInt();       
 +    } catch(NoSuchElementException ex) { 
 +      throw new AbnormalSituationException("Something bad happened!"); 
 +    } 
 +  } 
 +   
 +  public static double getRatio(Scanner sc) throws AbnormalSituationException { 
 +    System.out.println("Width: "); 
 +    int width = readInt(sc); 
 +    System.out.println("Height: "); 
 +    int height = readInt(sc); 
 +    return width / (double)height; 
 +  } 
 +   
 +  public static void main(String []args) { 
 +    double ratio = -1.0; 
 +    try (Scanner sc = new java.util.Scanner(System.in)){ 
 +      ratio = getRatio(sc); 
 +      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> 
 +===== Παραγωγή εξαίρεσης ===== 
 + 
 +Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. __Για να παράγουμε μία εξαίρεση πρέπει να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε__. Στο παρακάτω παράδειγμα, εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ήταν κενό τότε το πρόγραμμα μας δημιουργεί μία εξαίρεση του τύπου **EmptyFileException**. Δείτε τον κώδικα.
  
 <code java WholeFileReader.java> <code java WholeFileReader.java>
Line 75: Line 124:
 </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: 2021/03/23 07:34 (external edit)