User Tools

Site Tools


java:exceptions_thrown_by_methods

This is an old revision of the document!


Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο

Ας υποθέσουμε τώρα ότι θέλουμε να επαναλάβουμε την λειτουργικότητα του προηγούμενου προγράμματος εντός της μεθόδου getRatio που καλείται από τη main, αλλά η διαχείριση της εξαίρεσης να εξακολουθεί γίνεται στη μέθοδο main.

ExceptionHandling.java
import java.util.Scanner;
import java.util.NoSuchElementException;
import java.util.InputMismatchException;
 
public class ExceptionHandling {
 
  public static double getRatio(Scanner sc) throws NoSuchElementException {
    System.out.print("Width: ");
    int width = sc.nextInt();
    System.out.print("Height: ");
    int height = sc.nextInt();
    return width / (double)height;
  }
  public static void main(String []args) {
    try (Scanner sc = new java.util.Scanner(System.in)){
      double 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.");
    }
  }
}

Στον παραπάνω κώδικα παρατηρούμε ότι η μέθοδος getRatio μπορεί να παράγει μία εξαίρεση, αλλά η διαχείριση της γίνεται από τη μέθοδο που την καλεί, δηλαδή τη μέθοδο main. Η μέθοδος getRatio δεν περιέχει try/catch block, είμαστε όμως υποχρεωμένοι να δηλώσουμε σε αυτή ότι παράγει ένα exception του τύπου NoSuchElementException (ο τύπος εμπεριέχει όλες τις απογόνους κλάσεις όπως την κλάση InputMismatchException).

Stack Unwinding

Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και το JVM

java/exceptions_thrown_by_methods.1616430394.txt.gz · Last modified: 2021/03/22 16:26 by gthanos