Jetzt anmelden...

Login
Passwort
Registrieren
17.01.21 745 Views Kommentare [0] 1 0

credit: ©VAlex

JAVA Blog

Java Objekterzeugung verhindern

Um die Objekterzeugung in Java zu verhindern, gibt es zwei simple Techniken. Wir zeigen euch in diesem Beitrag, wie sie eingesetzt werden.

sub_zer0 18.11.2020

Download als eBook

Thema in Kurzform

Es gibt in Java zwei einfache Techniken, um das Erzeugen von Objekten zu verhindern:

  • Wenn wir die Objekterzeugung grundsätzlich verhindern wollen, verwenden wir abstrakte Klassen.
  • Falls die Objekterzeugung nur unter bestimmten Umständen verhindert werden soll, kann im Konstruktor eine Exception ausgelöst werden.

    Inhaltsverzeichnis

  1. Abstrakte Klasse
  2. Exception im Konstruktor

Abstrakte Klasse

Der schnellste Weg, die Objekterzeugung in Java zu verhindern, ist die entsprechende Klasse als abstrakt zu markieren. Eine abstrakte Klasse kann nicht instanziiert werden.

Hierzu setzen wir das Schlüsselwort abstract direkt hinter den Zugriffsmodifikator:

public abstract class Frucht { }

Versuchen wir nun ein Objekt der Klasse Frucht zu erzeugen, wird das nicht funktionieren und wir bekommen vom Compiler die Meldung 'Frucht' is abstract; cannot be instantiated.

Wann braucht man das?

Wenn wir sinnvoll mit Vererbung arbeiten, wird es allgemeine Oberklassen geben, von denen es keine Objekte geben soll. Angenommen die Klassen Zitrone und Orange erweitern die allgemeine Klasse Frucht. Es ist dann naheliegend, dass wir von den jeweiligen Unterklassen Objekte erzeugen. Wie sinnvoll ist es aber, die allgemeine Klasse Frucht zu instanziieren? Wir können uns ganz konkret eine Zitrone oder eine Orange vorstellen. Aber eine allgemeine "Frucht"? Wohl eher nicht und genau deshalb sollte die Möglichkeit zur Objekterzeugung von Frucht ausgeschlossen werden.

Exception im Konstruktor

Mithilfe einer ausgelösten Exception im Konstruktor kann die Objekterzeugung ebenfalls verhindert werden. Der Hintergrund ist der, dass die geworfene Exception die Ausführung der Konstruktormethode abbricht und nicht zu Ende bringt - damit wird auch die Objekterzeugung gestoppt.

Wann braucht man das?

Diesen Weg setzen wir ein, um die Erzeugung eines Objekts mit ungültigen Zustand zu verhindern. Hier ein Beispiel anhand der Klasse Adresse:

public class Adresse {

    private String strasse;
    private int hausnummer;

    public Adresse(String strasse, int hausnummer) throws Exception {

        if (strasse.length() < 3 || hausnummer < 1) {
            throw new Exception();
        }

        this.strasse = strasse;
        this.hausnummer = hausnummer;

    }
}

Eine sinnvolle Objekterzeugung wäre zum Beispiel new Adresse("Hauptstraße", 10). Das würde passen.

Nicht sinnvoll ist aber, ein neues Adresse-Objekt mit new Adresse("YY", -1) zu erzeugen. Daher sollte der Konstruktor entsprechend präpariert sein, um dies auch ganz zu verhindern.

Wenn versucht wird, ein Adresse-Objekt mit weniger als 3 Zeichen bei strasse und einem Wert kleiner als 1 bei Hausnumer zu erstellen, wird eine Exception geworfen und damit die Ausführung des Konstruktors abgebrochen. Das hat zur Folge, dass kein Adresse-Objekt erzeugt wird.

Da es sich bei der geworfenen Exception um eine geprüfte Exception handelt, muss der Aufruf der Konstruktor-Methode natürlich mit einem try-catch-Block umgeben sein (Exception Handling):

public static void main(String[] args){

    try {
        Adresse a1 = new Adresse("Römerstraße", 0);
    } catch (Exception e) {
        System.out.println("Objekt wurde nicht erzeugt");
    }
    System.out.println("Programm läuft weiter.");
}

}

Falconbyte unterstützen

Kommentar schreiben

Alle Kommentare

Es gibt bislang noch keine Kommentare zu diesem Thema.

Initializer

Eher selten aber praktisch!

Einstieg Objektorientierung

Lernen Sie die Grundlagen der Objektorientierung

Methoden in Java

Wie erstelle ich Methoden?

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2021 Stefan E. Heller

Impressum | Datenschutz

Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen