User Tools

Site Tools


java:exceptions_throwing

Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης

Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις της βασικής βιβλιοθήκης. Πως όμως δημιουργούνται νέοι τύποι εξαιρέσεων και πως και εμείς μπορούμε να πυροδοτήσουμε μια εξαίρεση;

Επανερχόμενοι στο προηγούμενο παράδειγμα, θα δημιουργήσουμε μία νέα κλάση απόγονο της κλάσης java.lang.Exception.

AbnormalSituationException.java
public class AbnormalSituationException extends java.lang.Exception {
   String msg = "Hello!";
   public AbnormalSituationException(String msg) {
     this.msg = msg;
   }
   @Override
   public String toString() {
     return "[MyException] "+msg;
   }
}

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

ExceptionHandling.java
import java.util.Scanner;
import java.util.NoSuchElementException;
import java.util.InputMismatchException;
 
public class ExceptionHandling {
 
  public static int readInt(Scanner sc) throws AbnormalSituationException {
    try {
      return sc.nextInt();      
    } catch(NoSuchElementException ex) {
      throw new AbnormalSituationException("Something bad happened!");
    }
  }
 
  public static double getRatio(Scanner sc) throws AbnormalSituationException {
    System.out.println("Width: ");
    int width = readInt(sc);
    System.out.println("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(AbnormalSituationException ex) {
      System.out.println(ex);
      StackTraceElement[] st = ex.getStackTrace();
      for(StackTraceElement e: st)
        System.out.println(e);
    }
  }
}
java/exceptions_throwing.txt · Last modified: 2021/03/23 07:34 (external edit)