java:exceptions_intro

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_intro [2015/03/02 05:20]
ckonstantas
java:exceptions_intro [2015/03/02 08:00]
gthanos [Exception Handler]
Line 1: Line 1:
-====== Τι είναι η εξαίρεση(exception); ======+====== Τι είναι η εξαίρεση (Exception); ======
 Όπως αναφέρει και το όνομα της συγκεκριμένης ενότητας,​ θα αναφερθούμε σε έναν μηχανισμό ο οποίος διαχειρίζεται γεγονότα τα οποία δεν ανήκουν στην κανονική εκτέλεση του προγράμματος αλλά συμβαίνουν απροσδόκητα. Για να διασφαλίσουμε οτι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός,​ χρησιμοποιούμε τον μηχανισμό των **εξαιρέσεων(exceptions)**. Όπως αναφέρει και το όνομα της συγκεκριμένης ενότητας,​ θα αναφερθούμε σε έναν μηχανισμό ο οποίος διαχειρίζεται γεγονότα τα οποία δεν ανήκουν στην κανονική εκτέλεση του προγράμματος αλλά συμβαίνουν απροσδόκητα. Για να διασφαλίσουμε οτι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός,​ χρησιμοποιούμε τον μηχανισμό των **εξαιρέσεων(exceptions)**.
  
Line 18: Line 18:
       int y;       int y;
       int result;       int result;
 +      Scanner input = new Scanner(System.in);​
  
       System.out.print( "Enter first integer: " );       System.out.print( "Enter first integer: " );
Line 28: Line 29:
       ​       ​
       System.out.printf( "​Product is %d\n", result );       System.out.printf( "​Product is %d\n", result );
 +   }
 } }
 </​code>​ </​code>​
Line 72: Line 74:
    
    ​public static void main (String[] args) {    ​public static void main (String[] args) {
-      int x; +      int x, y, result
-      ​int y; +       
-      ​int result;+      ​Scanner input = new Scanner(System.in);
  
       System.out.print( "Enter first integer: " );       System.out.print( "Enter first integer: " );
Line 84: Line 86:
       try {       try {
            ​result = x/y;            ​result = x/y;
 +           ​System.out.printf( "​Product is %d\n", result );
       } catch (ArithmeticException ae) {       } catch (ArithmeticException ae) {
            ​System.out.println("​ArithmeticException occured!"​);​            ​System.out.println("​ArithmeticException occured!"​);​
-           if(y = 0){ +           ​if(y ​== 0){ 
-              System.out.println("​Division by zero in particular"​)+              System.out.println("​Division by zero in particular"​);
            }            }
       }       }
-      ​ +   ​ 
-      ​System.out.printf( "​Product is %d\n", result );+   }
 } }
 </​code>​ </​code>​
  
 Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κάποιον χειριστή(handler) ο οποίος θα αναγνωρίσει οτι υπάρχει κάποια διαίρεση με το 0 και έτσι θα ενημερώσει τον χρήστη. Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα,​ εμπλουτισμένο όμως με κάποιον χειριστή(handler) ο οποίος θα αναγνωρίσει οτι υπάρχει κάποια διαίρεση με το 0 και έτσι θα ενημερώσει τον χρήστη.
- 
-Ας δούμε ένα τμήμα κώδικα όπου θα βάζαμε αν χειριζόμασταν αρχεία αλλά και δομές δεδομένων:​ 
- 
-<code java> 
-try { 
- 
-} catch (IndexOutOfBoundsException e) { 
-    System.err.println("​IndexOutOfBoundsException:​ " + e.getMessage());​ 
-} catch (IOException e) { 
-    System.err.println("​Caught IOException:​ " + e.getMessage());​ 
-} 
- 
-</​code>​ 
- 
-Μπορούμε να καταλάβουμε ποιο είναι το πρώτο είδος εξαίρεσης που θα εντοπίσει;​ Είναι η εξαίρεση που προκύπτει όταν βγαίνουμε εκτός ορίων μιας δομής(π.χ. πίνακας).Παρατηρούμε όμως οτι υπάρχει και ένα επιπλέον block που καλύπτει και τις εξαιρέσεις που μπορούν να προκύψουν απο την είσοδο ή την έξοδο στοιχείων (παράδειγμα:​ προσπαθούμε να ανοίξουμε ένα αρχείο που δεν υπάρχει). 
- 
-Στο παραπάνω παράδειγμα το μόνο που κάνουμε είναι να εκτυπώσουμε ένα μήνυμα οτι προέκυψε μια εξαίρεση. Προφανώς,​ μπορούμε και πρέπει να βάλουμε κώδικα που κάνει κάτι πιο σημαντικό απο αυτό. ​ 
  
 ==== Finaly Block ==== ==== Finaly Block ====
-Εκτός απο τα catch blocks, μπορούμε να έχουμε ένα finaly block το οποίο θα εκτελεστεί //​**πάντα**//​. Ακόμη και σε περίπτωση που προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να συμπεριλάβουμε,​ το finaly block θα εκτελεστεί. +Εκτός απο τα catch blocks, μπορούμε να έχουμε ένα finaly block το οποίο θα εκτελεστεί //​**πάντα**//​. Ακόμη και σε περίπτωση που προκύψει μια εξαίρεση ενός τύπου που δεν έχουμε φροντίσει να συμπεριλάβουμε ​ή δεν προκύψει καμία εξαίρεση, το finaly block θα εκτελεστεί.
  
 <code java> <code java>
Line 141: Line 126:
 </​code>​ </​code>​
  
-Επίσης,​ ένας λόγος που μπορούμε να χρησιμοποιήσουμε το finaly είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί ​για ​όλες τις εξαιρέσεις όπως για παράδειγμα να κλείσουμε ελεγχόμενα το πρόγραμμα. +Ένας λόγος που μπορούμε να χρησιμοποιήσουμε το finaly ​block είναι για να συμπεριλάβουμε κώδικα που θέλουμε να εκτελεστεί ​σε όλες τις ​περιπτώσειςόπως για παράδειγμα να κλείσουμε ελεγχόμενα τα αρχεία του προγράμματος. Στο παραπάνω παράδειγμα υπάρχει ολοκληρωμένο ένα μικρό τμήμα κώδικα που ανοίγει ένα αρχείο,​ γράφει κάτι και μετά το κλείνει ​το αρχείο που άνοιξε
- +====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ​======
-Στο παραπάνω παράδειγμα υπάρχει ολοκληρωμένο ένα μικρό τμήμα κώδικα που ανοίγει ένα αρχείο,​ γράφει κάτι και μετά το κλείνει. +
-===== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο =====+
 Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Υπάρχει ένας μηχανισμός που μας επιτρέπει να μην χειριστούμε την εξαίρεση στο σημείο που προκύπτει αλλά στο σημείο που καλείται η μέθοδος μεσα στην οποία θα προκύψει μια εξαίρεση. Στην προηγούμενη ενότητα δείξαμε πως μπορούμε να χειριστούμε μια εξαίρεση όταν προκύπτει. Υπάρχει ένας μηχανισμός που μας επιτρέπει να μην χειριστούμε την εξαίρεση στο σημείο που προκύπτει αλλά στο σημείο που καλείται η μέθοδος μεσα στην οποία θα προκύψει μια εξαίρεση.
  
Line 151: Line 134:
 <code java> <code java>
  
-public void writeToFile() throws IOException{+public void writeToFile() throws IOException,​IndexOutOfBoundsException{
  
   File file = new File ("​C:/​Users/​Me/​Desktop/​directory/​file.txt"​);​   File file = new File ("​C:/​Users/​Me/​Desktop/​directory/​file.txt"​);​
Line 163: Line 146:
 </​code>​ </​code>​
  
-Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία δεν διαχειριζόμαστε την εξαίρεση εντός της μεθόδου writeToFile αλλά αφήνουμε να διαχειριστεί τις εξαιρέσεις που μπορούν να προκύψουν,​ αυτός που θα καλέσει τη μέθοδο writeToFile. +Στον παραπάνω κώδικα βλέπουμε την περίπτωση στην οποία δεν διαχειριζόμαστε την εξαίρεση εντός της μεθόδου writeToFile αλλά αφήνουμε να διαχειριστεί τις εξαιρέσεις που μπορούν να προκύψουν,​ αυτός που θα καλέσει τη μέθοδο writeToFile. ​Το μόνο που έχουμε να κάνουμε,​ είναι να βάλουμε τη δεσμευμένη λέξη **throws** και δίπλα όλες τις εξαιρέσεις που μπορούν να προκύψουν εντός της μεθόδου και θέλουμε να τις χειριστούμε.
  
 ====== Πυροδότηση μιας εξαίρεσης ====== ====== Πυροδότηση μιας εξαίρεσης ======
 Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται απο κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​ Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται απο κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;​
  
-Οπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη **trow** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε.+Οπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη **throw** και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε.
  
 <code java> <code java>
java/exceptions_intro.txt · Last modified: 2019/04/20 05:02 by gthanos