User Tools

Site Tools


java:exceptions_thrown_by_methods

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_thrown_by_methods [2021/03/22 16:26] gthanosjava:exceptions_thrown_by_methods [2021/03/23 07:33] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ======
  
-Ας υποθέσουμε τώρα ότι θέλουμε να επαναλάβουμε την λειτουργικότητα του προηγούμενου προγράμματος εντός της μεθόδου getRatio που καλείται από τη main, αλλά η διαχείριση της εξαίρεσης να εξακολουθεί γίνεται στη μέθοδο main.+Ας υποθέσουμε τώρα ότι θέλουμε να επαναλάβουμε την λειτουργικότητα του προηγούμενου προγράμματος εντός της νέας μεθόδου getRatio που καλείται από τη main, αλλά η διαχείριση της εξαίρεσης να εξακολουθεί γίνεται στη μέθοδο main.
  
 <code java ExceptionHandling.java> <code java ExceptionHandling.java>
Line 34: Line 34:
 ====== Stack Unwinding ====== ====== Stack Unwinding ======
  
-Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και το JVM  +Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και συνεχίζει την εκτέλεση του στο πρώτο catch block, το οποίο ταιριάζει με τον τύπο της εξαίρεσης. Το stack της διεργασίας αναδιπλώνεται αυτόματα μέχρι το σημείο που θα βρεθεί το κατάλληλο catch block. Καμία από τις συναρτήσεις που εμπλέκονται δεν τερματίζει ομαλά μέχρι να φτάσουμε στο catch block. Δείτε το παρακάτω παράδειγμα, στο οποίο η πιθανή εξαίρεση παράγεται μέσα στη μέθοδο readInt. 
 + 
 +<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 NoSuchElementException {
 +    return sc.nextInt();
 +  }
 +  
 +  public static double getRatio(Scanner sc) throws NoSuchElementException {
 +    System.out.print("Width: ");
 +    int width = readInt(sc);
 +    System.out.print("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(InputMismatchException ex) {
 +      System.out.println("Input doen not match integer value.");
 +    } catch(NoSuchElementException ex) {
 +      System.out.println("You have closed the input from command line.");
 +    }
 +  } 
 +}
 +</code>
 +
 +Στο παραπάνω παράδειγμα, όταν θα συμβεί μία εξαίρεση στη μέθοδο 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 | Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαιρέσεων ]]|
  
java/exceptions_thrown_by_methods.1616430394.txt.gz · Last modified: 2021/03/22 16:26 by gthanos