Both sides previous revisionPrevious revisionNext revision | Previous revision |
java:exceptions_intro [2017/03/10 09:46] – gthanos | java:exceptions_intro [2021/03/23 07:23] (current) – [Εξαιρέσεις (Exceptions)] gthanos |
---|
====== Εξαιρέσεις (Exceptions) ====== | ====== Εξαιρέσεις (Exceptions) ====== |
| |
Σε αυτή την ενότητα θα αναφερθούμε σε αντικείμενα τα οποία δημιουργούνται κατά την ροή εκτέλεσης ενός προγράμματος, όταν συμβαίνει κάτι αναπάντεχο ή μη διαχειρίσιμο από το πρόγραμμα. Σε αυτές της περιπτώσεις παράγεται ένα νέο αντικείμενο που ονομάζεται "εξαίρεση" (//exception//), με παράλληλη διακοπή της κανονικής ροής του προγράμματος. Ο προγραμματιστής καλείται να διαχειριστεί μέσα από επιπλέον κώδικα τις πιθανές εξαιρέσεις, και κατ' επέκταση να διαχειριστεί ομαλά τα γεγονότα από τα οποία προέρχονται. | Σε αυτή την ενότητα θα αναφερθούμε σε αντικείμενα τα οποία δημιουργούνται κατά την ροή εκτέλεσης ενός προγράμματος, όταν συμβαίνει κάτι αναπάντεχο ή μη διαχειρίσιμο από το πρόγραμμα. Σε αυτές της περιπτώσεις παράγεται ένα νέο αντικείμενο που ονομάζεται "εξαίρεση" (//exception//), με παράλληλη διακοπή της κανονικής ροής του προγράμματος. Ο προγραμματιστής καλείται να διαχειριστεί μέσα από επιπλέον κώδικα τις πιθανές εξαιρέσεις, και κατ' επέκταση τα γεγονότα από τα οποία προέρχονται. |
| |
Για να διασφαλίσουμε ότι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός, χρησιμοποιούμε τον μηχανισμό διαχείρισης των **εξαιρέσεων (exceptions)**. | Για να διασφαλίσουμε ότι το πρόγραμμά μας θα συνεχίσει την εκτέλεσή του ακόμη και αν συμβεί ένα απροσδόκητο γεγονός, χρησιμοποιούμε τον μηχανισμό διαχείρισης των εξαιρέσεων (//exception handling//). |
| |
| |
====== Αντικείμενο της εξαίρεσης (exception object) ====== | ====== Αντικείμενο της εξαίρεσης (exception object) ====== |
| |
Κάθε εξαίρεση που μπορεί να προκληθεί παράγει ένα αντικείμενο το οποίο περιέχει όλες τις πληροφορίες που έχουν να κάνουν με το λάθος το οποίο έχει προκύψει, όπως ο τύπος του λάθους και την κατάσταση που βρισκόταν το πρόγραμμα όταν έγινε το λάθος αυτό. | Όταν προκληθεί μία εξαίρεση παράγει ένα αντικείμενο το οποίο περιέχει όλες τις πληροφορίες που έχουν να κάνουν με το λάθος το οποίο έχει προκύψει, όπως ο τύπος του λάθους το σημείο που συνέβη το λάθος, από ποια σημεία είχε περάσει το πρόγραμμα μέχρι να συμβεί το λάθος κ.α. |
| |
Σε αυτό το σημείο ας δούμε ένα πολύ απλό και συχνό λάθος που μπορεί να προκύψει αν δεν λάβει σχετική μέριμνα ο προγραμματιστής. | Σε αυτό το σημείο ας δούμε ένα πολύ απλό παράδειγμα λάθους που μπορεί να προκύψει αν δεν λάβει σχετική μέριμνα ο προγραμματιστής. |
| |
<code java TestDivideByZero.java> | <code java ExceptionHandling.java> |
import java.io.*; | |
import java.util.Scanner; | import java.util.Scanner; |
public class TestDivideByZero { | |
| |
public static void main (String[] args) { | |
int x; | |
int y; | |
int result; | |
Scanner input = new Scanner(System.in); | |
| |
System.out.print( "Enter first integer: " ); | public class ExceptionHandling { |
x = input.nextInt(); | |
| public static void main(String []args) { |
System.out.print( "Enter second integer: " ); | |
y = input.nextInt(); | Scanner sc = new java.util.Scanner(System.in); |
| |
result = x/y; | System.out.print("Width: "); |
| int width = sc.nextInt(); |
System.out.printf( "Product is %d\n", result ); | System.out.print("Height: "); |
} | int height = sc.nextInt(); |
| double ratio = width / (double)height; |
| System.out.format("Ratio: %.2f", ratio); |
| sc.close(); |
| } |
} | } |
</code> | </code> |
| |
Τι θα συμβεί στο παραπάνω πρόγραμμα αν ο 2ος αριθμός που θα δώσει ο χρήστης είναι 0; Επίσης αν ο χρήστης δεν δώσει αριθμό σαν είσοδο αλλά γράμμα; | Τι θα συμβεί στο παραπάνω πρόγραμμα αν ο χρήστης αντί για ακέραιο δώσει μία σειρά από γράμματα ή αν κλείσει την εισαγωγή χαρακτήρων από το πληκτρολόγιο πατώντας CTRL+D. |
| |
Όπως καταλαβαίνουμε, θα πρέπει να προβλέψουμε όλες τις περιπτώσεις (ή τουλάχιστον τις πιο βασικές) στις οποίες ο χρήστης είτε από λάθος είτε επειδή είναι κακόβουλος θα δώσει σαν είσοδο κάτι το οποίο δεν είναι σωστό και θα προκαλέσει πρόβλημα. Το παραπάνω παράδειγμα είναι ένα από τα προβλήματα που μπορούν να δημιουργηθούν σε ένα πρόγραμμα. Ο προγραμματιστής καλείται να το αντιμετωπίσει προκειμένου **να μην σταματήσει η εκτέλεση του προγράμματος**. | |
| |
Στο παραπάνω παράδειγμα συνεπώς, το σύστημα θα παράξει ένα αντικείμενο που θα περιγράφει το είδος του λάθους που συνέβη. Ο προγραμματιστής πρέπει: | Ο προγραμματιστής καλείται να προβλέψει τις παραπάνω περιπτώσεις στις οποίες ο χρήστης θα δώσει μη κατάλληλη είσοδο. Στο παράδειγμα , το σύστημα θα παράξει ένα αντικείμενο που θα περιγράφει το είδος του λάθους που συνέβη. Ο κώδικας του προγράμματος πρέπει: |
- να λάβει το αντικείμενο | - να λάβει το αντικείμενο |
- να εξετάσει το λάθος που έχει προκύψει | - να εξετάσει το λάθος που έχει προκύψει |