User Tools

Site Tools


java:exceptions_try_with_resources

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

Ας υποθέσουμε ότι έχουμε το παράδειγμα του ορθογωνίου παραλληλογράμμου που είχαμε συναντήσει και στο παρελθόν. Στα παραδείγματα που έχουμε δει μέχρι τώρα, το ορθογώνιο παραλληλόγραμμο λαμβάνει ως παραμέτρους ακέραιους για τις τιμές του πλάτους και το ύψους. Οι ακέραιοι αυτοί υποθέτουμε ότι είναι πάντα θετικοί. Τι θα συμβεί όμως αν κατά την κλήση του κατασκευαστή δοθεί αρνητικό όρισμα για το πλάτος ή το ύψος; Η κλήση του κατασκευαστή με ένα αρνητικό όρισμα θα δημιουργούσε λογικό πρόβλημα στο αντικείμενο που δημιουργείται.

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

Στο παρακάτω παράδειγμα του ορθογωνίου παραλληλογράμμου κάθε φορά που δίνεται αρνητικό όρισμα ή μηδέν παράγεται μία εξαίρεση του τύπου java.lang.IllegalArgumentException. Η δημιουργία του αντικειμένου διακόπτεται και το πρόγραμμα μας συνεχίζει την εκτέλεση του έχοντας αποτύχει η αρχικοποίηση του αντικειμένου.

Rectangle.java
public class Rectangle {
  int width, height;
 
  public Rectangle(int width, int height) {
    if( width <= 0 || height <= 0)
      throw new IllegalArgumentException();
    this.width = width;
    this.height = height;
  }
 
  public int getWidth() {
    return width;
  }
 
  public int getHeight() {
    return height;
  }
 
  @Override
  public String toString() {
    return "width: "+width+", height: "+height;
  }
}
SafelyCreateRectangle.java
import java.util.Scanner;
 
public class SafelyCreateRectangle {
  public static void main(String []args) {
    Scanner sc = new Scanner(System.in);
 
    while(true) {
      System.out.print("Width: ");
      int width = sc.nextInt();
      System.out.print("Height: ");
      int height = sc.nextInt();
      Rectangle r;
      try {
        r = new Rectangle(width, height);
        System.out.println(r);
        break;
      }
      catch(IllegalArgumentException ex) {
        System.out.println("Invalid Argument. Try again..");
      }
    }
  }
}
java/exceptions_try_with_resources.txt · Last modified: 2021/03/22 21:44 (external edit)