Both sides previous revisionPrevious revisionNext revision | Previous revision |
java:exceptions_thrown_by_methods [2021/03/23 07:30] – [Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο] gthanos | java:exceptions_thrown_by_methods [2021/03/23 07:33] (current) – external edit 127.0.0.1 |
---|
====== Stack Unwinding ====== | ====== Stack Unwinding ====== |
| |
Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και το JVM τερματίζει την εκτέλεση και συνεχίζει στο πρώτο catch block, το οποίο ταιριάζει στον τύπο της εξαίρεσης. Το stack της διεργασίας αναδιπλώνεται αυτόματα μέχρι το σημείο που θα βρεθεί το κατάλληλο catch block. Καμία από τις συναρτήσεις που εμπλέκονται δεν τερματίζει ομαλά μέχρι να φτάσουμε στο catch block. Δείτε το παρακάτω παράδειγμα, στο οποίο η πιθανή εξαίρεση παράγεται μέσα στη μέθοδος readInt. | Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και συνεχίζει την εκτέλεση του στο πρώτο catch block, το οποίο ταιριάζει με τον τύπο της εξαίρεσης. Το stack της διεργασίας αναδιπλώνεται αυτόματα μέχρι το σημείο που θα βρεθεί το κατάλληλο catch block. Καμία από τις συναρτήσεις που εμπλέκονται δεν τερματίζει ομαλά μέχρι να φτάσουμε στο catch block. Δείτε το παρακάτω παράδειγμα, στο οποίο η πιθανή εξαίρεση παράγεται μέσα στη μέθοδο readInt. |
| |
<code java ExceptionHandling.java> | <code java ExceptionHandling.java> |
import java.util.InputMismatchException; | import java.util.InputMismatchException; |
| |
public class ExceptionHandling_6 { | public class ExceptionHandling { |
| |
public static int readInt(Scanner sc) throws NoSuchElementException { | public static int readInt(Scanner sc) throws NoSuchElementException { |
</code> | </code> |
| |
Στο παραπάνω παράδειγμα, όταν θα συμβεί μία εξαίρεση στη μέθοδο readInt, ο κώδικας σταματήσει την εκτέλεση του και καμία από τις συναρτήσεις που έχουν κληθεί δεν θα επιστρέψει ομαλά. Αυτό που θα συμβεί είναι ότι ο κώδικας θα συνεχίσει να εκτελείται στο κατάλληλο catch block μέσα στη μέθοδο main. Στο παράδειγμα, η μεταβλητή ratio έχει την τιμή -1.0 με την οποία αρχικοποιήθηκε. | Στο παραπάνω παράδειγμα, όταν θα συμβεί μία εξαίρεση στη μέθοδο readInt, ο κώδικας σταματήσει την εκτέλεση του και καμία από τις συναρτήσεις που έχουν κληθεί ενδιάμεσα (getRatio, readInt) δεν θα επιστρέψει ομαλά. Αυτό που θα συμβεί είναι ότι ο κώδικας θα συνεχίσει να εκτελείται στο κατάλληλο catch block, που βρίσκεται στη μέθοδο main. Αφού συμβεί το exception, η μεταβλητή ratio έχει την τιμή -1.0 με την οποία αρχικοποιήθηκε. |
| |
|Προηγούμενο: [[:java:exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:exceptions_throwing | Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαιρέσεων ]]| | |Προηγούμενο: [[:java:exceptions_try_catch_block| Διαχείριση Εξαιρέσεων ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:exceptions_throwing | Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαιρέσεων ]]| |
| |