Welche Attribute kommen in den Konstruktor?

GregDev

Mitglied
Hallo Community,

ich habe eine kleine Anfänger Frage bei der ich mir oft sehr unsicher bin. Und zwar welche Attribute kommen in den Konstruktor und welche sollten über Methoden übergeben werden.
Angenommen es gibt zwei Klassen: Auto und Main
Java:
public class Auto {
    private int strecke, benzinstand;
    
    public Auto(int strecke, int benzinstand) {
        this.strecke = strecke;
        this.benszinstand = benzinstand;
        // Weiterer Code
    }
    
    public getStrecke() {
        return strecke;
    }
}

Java:
public class Main {
    Auto auto;
    public Main() {
        auto = new Auto(5, 5);
        System.out.println(auto.getStrecke());
    }
}

Oder die Auto Klasse so:
Java:
public class Auto {
    private int strecke, benzinstand;
    
    public Auto() {
        // Weitere Code
    }
    
    public getStrecke() {
        return strecke;
    }

    public setStrecke(int strecke) {
                this.strecke = strecke;
    }
}

Viele Grüße
 
Y

yfons123

Gast
was ist denn der unterschied zwischen den Auto klassen

was kann man tun mit der 2ten klasse und was kann man tun mit der ersten im vergleich
 

mihe7

Top Contributor
Das ist auch nicht immer so eindeutig. Der Konstruktor dient dazu, das Objekt zu initialisieren, so dass es in einem sinnvollen Zustand ist. Was man als sinnvoll erachtet, liegt ein Stück weit in der Entscheidungsfreiheit des Entwicklers.

Der Code, den Du hier zeigst, erfüllt unterschiedliche Aufgaben: die erste Klasse beschreibt unveränderliche (immutable) Auto-Objekte, während die zweite Klasse Änderungen zulässt.

Du kannst Konstruktoren auch überladen und in einem Konstruktor einen anderen aufrufen:

Java:
public class Auto {
    private int strecke, benzinstand;
    
    public Auto() {
        this(0, 0);
    }

    public Auto(int benzinstand) {
        this(0, benzinstand);
    }

    public Auto(int strecke, int benzinstand) {
        this.strecke = strecke;
        this.benzinstand = benzinstand;
    }
    
    public getStrecke() {
        return strecke;
    }

    public setStrecke(int strecke) {
        this.strecke = strecke;
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Auf die eigentliche Frage ist @mihe7 schon gut eingegangen. Evtl. als weiterführender Hinweis der wichtig wird für komplexere Klassen:

So ein Konstruktor kann bei komplexen Klassen natürlich recht umfangreich werden. Hier kann es ggf. unübersichtlich werden und da kommen dann weitere Optionen ins Spiel, die man ggf. bedenken kann:

a) Factory Methoden. Du stellst Dann nicht (nur) Konstruktoren zur Verfügung sondern erstellst dann Methoden, die dafür zuständig sein. Diese sind dann statisch und erstellen eine Instanz und geben diese zurück. Ein Vorteil kann z.B. sein, wenn zwei Parameter den gleichen typ haben und es macht Sinn nur den einen oder nur den anderen anzugeben. Die Konstruktoren wären dann nicht zu unterscheiden, aber diese Methoden könnten dann helfen a.la. createWithStrecke, createWithBenzinstand.

b) Wenn man mehrere Parameter hat und viele Kombinationen erlauben will/muss, dann wird das natürlich unübersichtlich. Wie viele Konstruktoren oder Factory Methoden willst Du schreiben? Hier kommt dann schnell das Builder Pattern in Spiel. Du hast eine weitere Klasse, die die möglichen Werte umfassen kann. Diese haben alle den Default Wert des Attributs. Und eine statische Methode builder() gibt Dir eine Instanz dieser Builder Klasse. Dann hast Du viele Setter, die aber alle diesen Builder zurück geben. Und es gibt eine Methode build, die dann die eigentliche Instanz erzeugt. Und dazu gibt es dann in der klasse einen nicht öffentlichen Konstruktor, der einen Builder als Parameter hat.

Also nur mit einem Element skizziert sähe das so aus:
Java:
public class Auto {
    private Auto (AutoBuilder builder) {
        strecke = builder.strecke;
    }
    
    static class AutoBuilder {
        int strecke = 0;
    
        public AutoBuilder withStrecke(int strecke) {
            this.strecke = strecke;
            return this;
        }
        
        public Auto build() {
            return new Auto(this);
        }
    }
    
    public static builder() {
        return new AutoBuilder();
    }
}

Und nutzen kann man das dann in der Art:
Code:
Auto meinAuto = Auto.builder()
                .withStrecke(19)
                .withHersteller("BMW")
                .withBenzinstand(57)
                .withSitzplätze(7)
                .build();

Sowas kann man selbst schreiben oder man kann sich sowas auch generieren lassen, also z.B. mit Lombok.
 

GregDev

Mitglied
Ah ok. Danke erstmal. Das ist sehr interressant, daher es wie schon @mihe7 gesagt hat diese Entscheidung bei dem Entwickler liegt. Und ich deshalb keine eindeutige Lösung gefunden haben, jetzt aber dank euch weiß, dass es auch keine eindeutige Lösung gibt.

Der Satz "Der Konstruktor setzt die Variable in einen nutzbaren Zustand" sehr hilfreich, so kann man schon ein wenig filtern.

Das Prinzip des Überladens war mir noch nicht so bewusst, macht in Nachhinein aber sehr viel Sinn.
Und auch das nutzen von Buildern ist sehr raffiniert.

Danke euch beiden. Ich glaube meine Frage hätte sich damit beantwortet.
Viele Grüße.
 

temi

Top Contributor
Der Satz "Der Konstruktor setzt das Objekt in einen nutzbaren Zustand" sehr hilfreich
Das ist auch die wichtigste Aussage gewesen.

Danach ist die Regel, dass der Konstruktor nicht zu viele Parameter haben sollte, um nicht unübersichtlich zu werden. Dazu können Parameter in Gruppen zusammenfasst werden (z. B. anstatt von zwei int Werten x und y wird der Typ Point verwendet) oder man verwendet das Builder-Pattern. Beim Builder-Pattern gilt auch wieder die erste Regel, so dass man für das Objekt unbedingt notwendige Parameter direkt der builder() Methode mit gibt. Alle weiteren Parameter sind dann optional.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Q SMS basierte Applikationen, welche Programmiersprache? Java Basics - Anfänger-Themen 8
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Welche Verteilung? Java Basics - Anfänger-Themen 1
L Welche Methode? Java Basics - Anfänger-Themen 7
O Methoden welche ich implementier Java Basics - Anfänger-Themen 11
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
M Welche Entwicklungsumgebung? Java Basics - Anfänger-Themen 32
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
K Erste Schritte Java lernen - Welche Bücher? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
A Klassen welche Klassen importiert Eclipse automatisch Java Basics - Anfänger-Themen 2
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
G Welche JAVA IDE? Java Basics - Anfänger-Themen 3
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
C Datenbank - Welche Java Basics - Anfänger-Themen 5
S Welche Art von Liste? Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
T Welche Schleife? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3
K welche art von Liste für TableModell Java Basics - Anfänger-Themen 2
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25
S welche Programmstruktur? Java Basics - Anfänger-Themen 8
M Welche Datenbank? Java Basics - Anfänger-Themen 5
B Welche Themengebiete benötige ich? Java Basics - Anfänger-Themen 7
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
H Welche Art der Ein/Ausgabe Java Basics - Anfänger-Themen 2
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
U Welche(s) Framework(s) wären geeignet? Java Basics - Anfänger-Themen 8
StrikeTom Welche Dateitypen unterstützt JMF (Java Media Framework)? Java Basics - Anfänger-Themen 6
S Welche Collection? Java Basics - Anfänger-Themen 5
A Welche UML Software benutzt ihr / ist empfehlenswert? Java Basics - Anfänger-Themen 2
N Welche Datenstukturen und Methoden Java Basics - Anfänger-Themen 3
L Auswahl auf welche Art gespeichert werden soll Java Basics - Anfänger-Themen 6
B Welche Java-Installation ist aktiv? Java Basics - Anfänger-Themen 2
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
S Welche möglichkeiten gibt es eine Zahl zu spiegeln? Java Basics - Anfänger-Themen 17
U Welche Seite für Anfänger Java Basics - Anfänger-Themen 11
K Welche Entwicklungsumgebung für Einsteiger? Java Basics - Anfänger-Themen 16
S Webapplikation welche alternative zu gwt? Java Basics - Anfänger-Themen 2
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
S Welche Methode in JFrame überschreiben? Java Basics - Anfänger-Themen 12
H Designfrage: Welche Liste? Java Basics - Anfänger-Themen 3
Z Welche IO-Klasse verwenden? Java Basics - Anfänger-Themen 2
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
G Herausfinden, welche Componente als LETZTES focus hatte Java Basics - Anfänger-Themen 2
H Welche PDF Biblothek? Java Basics - Anfänger-Themen 6
G Variable welche in anderer Klasse liegt, verändern. Java Basics - Anfänger-Themen 2
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
K Welche Exception? Java Basics - Anfänger-Themen 6
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
G welche Teile der api sind wichtig? Java Basics - Anfänger-Themen 3
K Welche methoden gibt es in Java um Zahlen von der Java Basics - Anfänger-Themen 11
G welche Java-Technologie für JDBC geeignet Java Basics - Anfänger-Themen 6
G Welche Programmiersprache für ein Betriebssystem? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben