Erste Schritte Konstruktor - wie genau funktioniert der Code?

Guten Tag,
ich arbeite gerade das Thema unserer Vorlesung nach und stoße dabei auf einige Schwierigkeiten. Ich habe zwar schon die Lösung zu der Aufgabenstellung, allerdings verstehe ich nicht, wie genau die Lösung (Konstruktor) abläuft bzw. was genau in der Anwendung vorgeht und hoffe, dass mir jemand dabei etwas helfen könnte. Die Aufgabenstellung ist folgende:
"Entwickeln Sie eine Klasse, welche einen Ziegelstein darstellt mit drei double Attributen: die Abmessungen x, y, z. Die Klasse soll einen Konstruktor besitzen mit Hilfe dessen alle diese Attribute initialisiert werden können und eine Methode volume()zur Berechnung des Volumens des Ziegelsteins."

Eine Lösung die uns vorgestellt wurde, ist diese:

Java:
package Uebungsblatt06;

 public class uebung06_02 {
     public static void main(String[] args) {

         Brick meinBrick = new Brick();

         System.out.println("Ihr erster initialisierter Wert ist " + meinBrick.x);
         System.out.println("Ihr zweiter initialisierter Wert ist " + meinBrick.y);
         System.out.println("Ihr dritter initialisierter Wert ist " + meinBrick.z);
         System.out.println("Ihre initialiserten Werte ensprechen ein Volumen von: " + meinBrick.berechneVolumen());
     }
 }

 class Brick {
     
     Brick() {
         x = 1.9;
         y = 2.5;
         z = 1.2;
     }

     double x; double y; double z; double preis; double volumen;

     double berechneVolumen() {
         return this.volumen = x * y * z;
     }
 }

Leider muss ich zugeben, das ich gar nicht erkenne, wo genau hier der "Konstruktor" liegt? Ebenso verwirrt mich folgende Codezeile "Brick meinBrick = new Brick();"
Ich hoffe jemand kann mir etwas Licht in diesen "düsteren" Code bringen, sodass ich ihn leichter verstehen und eventuel ähnliches selbst erstellen könnte!

Vielen Dank im Vorraus!
 
S

SlaterB

Gast
das gibt es nicht viel zu erkennen oder zu verstehen,
die aller ersten Grundlagen sind eigentlich reines Lernen,

ein Konstruktor ist das was einer Methode ähnelt, nur ohne Rückgabewert und wie die Klasse heißt,
meist recht früh in der Klasse, hier Zeile 17,

das hätte dir ein Lehrbuch oder irgendein Standardbeispiel auch gesagt, oder was genau weißt du denn ansonsten über Konstruktoren?
wenn du dafür 15 Min. einen Forum-Eintrag schreiben musst..

Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
 

faetzminator

Gesperrter Benutzer
Der Konstruktor ist [c]Brick() { ... }[/c], dieser wird bei Erstellung eines Bricks [c]new Brick()[/c] aufgerufen. Zeile 6 erstellt also einen neuen Brick und weist ihn der Variable [c]meinBrick[/c] des Types [c]Brick[/c] hinzu.
Du kannst auch Konstruktoren mit Parametern erstellen:
Java:
Brick(int x) {
    this.x = x; // speichere den Parameter x in dem gleichnamigen Attribut x
    y = 53;
    z = 34.1;
}
 

akimoon

Aktives Mitglied
Konstruktoren erkennst du immer daran, dass sie keinen Rückgabetyp haben und den Namen der Klasse tragen. In diesem Fall wäre dies
Code:
 Brick()
.

Mit
Code:
new  Brick();
wird genau dieser Konstruktor aufgerufen, und ein Brick-Objekt erzeugt.
Anschließend wird dieser mit Brick
Code:
Brick meinBrick = new Brick();
der Variablen meinBrick zugeordnet, welche den Typ Brick hat
Code:
Typ variablenname =
--->
meinBrick referenziert auf das Brick-Objekt, das mit
Code:
new Brick();
erzeugt wurde.

Hoffe das ist halbwegs verständlich so? :)
 
I

irgendjemand

Gast
mal davon abgesehen : wann das der "lösungsvorschlag" sein soll .. dann ist das aber ein verdammt schlechter ...

ich hätte im "null"-konstruktor überhaupt keine werte gesetzt sondern einen zweiten mit parametern verwendet *so wie ichs aus der aufgabenstellung auch gelesen habe* ..

dann ist zeile 23 ja mal totaler murks ... der der das geschrieben hat sollte sich vllt selbst noch mal ins 1te semester setzen ...

auch sollte man getter/setter verwenden statt public-fields ...


alles in allem sehr schwammige lösung
 
Vielen Dank für die Antworten!
Ich konnte ein paar der Aussagen mit meinen Sprict abgleichen und dadurch schon einiges mehr über den Code in Erfahrung bringen wie ich z.B. die Parameter im Klassen/Konstrukterbereich verschieben bzw. ändern kann. Die Methode mit ihren Rückgabewert ist ebenfalls verständlich sowie auch die Ausgabe und wie ich die Werte abrufe.

Allerdings habe ich noch immer ein Problem mit der Zeile
Java:
Brick meinBrick = new Brick();

Ich hatte vor, ein eigenes Beispiel zu erstellen was diesen hier sehr ähnlich sieht: Ich habe wieder etwas mit 3 Werten ausgewählt (in diesenFall eine heizung). Theoretisch hätte ich das Problem mit Copy + Paste lösen können indem ich einfach nur die Namen umbenenne. Das wäre aber schwachsinn, weswegen ich alles neu getippt hatte mit hilfe meines Scriptes aber nicht wusste, wie ich die oben benannte Zeile ändern müsste, dass das Programm läuft? Irgendwo oder irgendwie habe ich noch einen knick im Gehirn das ich nicht den Ansatz verstehe was ihr mir versucht habt zu erklären :(

Wenn ich es richtig verstanden habe, ist der 0815 Konstruktor "heizung" unten erstellt, aber es fehlt dem Programm noch der Befehl das er ihn auch aufruft/benutzt ist das richtig?

Java:
package uebung6;

public class testaufgabe2 {



	public static void main(String[] args) {
	       
	    	   
		
       System.out.println("erster Wert " + heizung.x);
       System.out.println("zweiter Wert" + heizung.y);
       System.out.println("dritter Wert" + heizung.z);
       
       class heizung{
    	   
    	   heizung(double x, double y, double z){
    		   x = 2.5;
    		   y = 2;
    		   z = 0.5;
    	   		} 
       		}
    }
}

Werde auch gleich einen Blick in der Buch werfen. Hoffe ich finde im Kapitel "5.5.1 Konstruktoren schreiben" die Lösung für das Problem.
 
E

erster

Gast
aber es fehlt dem Programm noch der Befehl das er ihn auch aufruft/benutzt ist das richtig?
Richtig erkannt du das hast^^.

Mit Hilfe eines Konstruktors wird eine Instant einer Klasse erstellt und mit (Standard-)Werten belegt. D.h. im Fall deines Ziegelsteines: mit
Code:
Brick meinBrick = new Brick();
erstellst du einen neuen Ziegelstein mit Namen meinBrick (das ist genau genommen nicht der Name des Steines sondern nur der Refenerenz auf eben diesen einen Stein). Willst du ein Steinchen mit bestimmten Maßen neu anlegen, musst du sowas verwenden wie
Code:
Brick andererBrick = Brick(1.0, 2.0. 3.0)
.

Das selbe kannst du mit deiner Heizung machen:
Code:
Heizung myHeizung = new Heizung(...)
. Damit sagst du also dem Compiler, dass du eine neue Heizung bauen willst, die die in der Klammer angegeben Eigenschaften besitzt...


Hoffe, das war vertsändlich^^
 

akimoon

Aktives Mitglied
Was mir noch auffällt:
Du musst aufpassen, dass du eine Klasse nicht in eine andere Klasse oder eine Methode schreibst.
Das sollte so aussehen:

Java:
public class 1 { ..
...
}
class 2 {
...
}
 
B

bygones

Gast
Was mir noch auffällt:
Du musst aufpassen, dass du eine Klasse nicht in eine andere Klasse
Java:
public class Outer {
   private Inner inner = new Inner();

   // methoden von Outer

   class Inner() {
     // alles von Inner
   }
}
innerhalb einer Klasse geht - innerhalb einer Methode dann als anonyme Klasse
 
Langsam aber sicher kommen wir der Lösung immer näher : )

Ich hatte sogar folgendes bereits im Programmcode stehen
Java:
heizung heizung1 = new heizung();
allerdings wurde mir von Eclipse gesagt, dass er so nicht arbeiten kann, aufgrund eines "compilation problem" weswegen ich die Idee wieder verworfen hatte aber scheinbar ging sie doch in die richtige Richtung.
 
E

erster

Gast
allerdings wurde mir von Eclipse gesagt, dass er so nicht arbeiten kann, aufgrund eines "compilation problem" weswegen ich die Idee wieder verworfen hatte aber scheinbar ging sie doch in die richtige Richtung.
Weil du schlichtweg keinen Konstruktor hast, der Heizung() heißt, sondern nur einen, der Heizung(double, double, double) heißt. Du müsstest also einen leeren Konstruktor ohne Argumente erstellen (um z.B. einige Standardwerte für die Heizung zu verwedenen bietet sich dieser an)
 

Mikrowelle

Bekanntes Mitglied
Noch ein Tip, Klassen Namen schreibt man groß.

Code:
class Heizung....
class TestAufgabe..
 
Zuletzt bearbeitet von einem Moderator:
Weil du schlichtweg keinen Konstruktor hast, der Heizung() heißt, sondern nur einen, der Heizung(double, double, double) heißt. Du müsstest also einen leeren Konstruktor ohne Argumente erstellen (um z.B. einige Standardwerte für die Heizung zu verwedenen bietet sich dieser an)

Tut mir leid, aber ich habe Schwierigkeiten das zu verstehen. Meinst du, ich muss den Absatz
Java:
            Heizung(double x, double y, double z){
                x = 2.5;
                y = 2;
                z = 0.5;
                 }

wiefolgt umändern

Java:
Heizung(){

}
Ansonsten verstehe ich leider nicht, wie ich mein Projekt umändern müsste, damit es Funktionieren kann : (

@Mikrowelle
Danke für den Ratschlag, habe die Namen abgeändert.
 

Crian

Top Contributor
Generell geht da noch viel durcheinander. Am besten wäre es, du liest dir das Thema in einem guten Buch (Insel z.B.) durch, ich sage trotzdem ein wenig dazu:

Bei deiner Heizungsklasse

[java=15] class heizung{

heizung(double x, double y, double z){
x = 2.5;
y = 2;
z = 0.5;
}
}[/code]

fehlen der Klasse die Attribute. Du übergibst dem Konstruktor drei Werte, die werden dann umbelegt und es wird nichts mehr damit gemacht.

Schritt 1 (inklusive Großschreibung):

Java:
public class Heizung {

    private double x;
    private double y;
    private double z;

    public Heizung(double x, double y, double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    } 

    public Heizung() {
        x = 2.5;
        y = 2;
        z = 0.5;
    }

}

Jetzt hat die Klasse Heizung drei Attribute x, y und z und zwei Konstruktoren. Der erste bekommt drei Werte übergeben, mit denen die Attribute befüllt werden, der zweite bekommt keine Werte, sondern initialisiert die Heizung mit Standardwerten.
Um hier die Attribute der Klasse und die übergebenen Werte zur Initialisierung auseinanderhalten zu können, wird "this." verwendet.

Beide Konstruktoren sind von außen zu verwenden ("public"), auf die Attribute soll von außen aber keiner Zugriff haben, deshalb sind sie als privat markiert ("private").

Schritt 2: Damit man von außen zumindest die Werte der Heizung ablesen kann, schreiben wir Getter für die Werte:

Java:
public class Heizung {

    private double x;
    private double y;
    private double z;

    public Heizung(double x, double y, double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    } 

    public Heizung() {
        x = 2.5;
        y = 2;
        z = 0.5;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public double getZ() {
        return z;
    }

}

Soweit klar?

Ein Aufruf von außen könnte dann so aussehen:

Java:
public class HeizungTesten {

    public static void main(String[] args) {
        // Ein Heizungsobjekt erzeugen:
        Heizung h1 = new Heizung();

        // Ein anderes Heizungsobjekt erzeugen:
        Heizung h2 = new Heizung(17.3, 22.6, 2.5);

        // Werte ausgeben:
        System.out.println("Heizung 1: x=" + h1.getX() + ", y=" + h1.getY() + ", z=" + h1.getZ());
        System.out.println("Heizung 2: x=" + h2.getX() + ", y=" + h2.getY() + ", z=" + h2.getZ());
    }

}

Vielleicht macht das die Sache klarer?

P.S. Ungetestet, Eclipse ist gerade beschäftigt....
 
Zuletzt bearbeitet:
Vielen Dank für die Geduld!

Die große Auflistung hat noch ein paar ungereimtheiten aufgeklärt =)

Werd noch bisschen daran basteln um das ganze etwas zu festigen aber ich denke die nächste Aufgabe sollte ich vorerst alleine schaffen : )
 

faetzminator

Gesperrter Benutzer
Statt
Java:
public Heizung() {
   x = 2.5;
    y = 2;
    z = 0.5;
}
Könnte man dort auch den zweiten Konstruktor aufrufen, also so:
Java:
public Heizung() {
    this(2.5, 2, 0.5);
}

Das macht vor allem Sinn, wenn man zig Konstruktoren hat, bei welchen einer der Master ist:
Java:
// erstellt eine Person
public Person(String name, String vorname) {
    // "Masterkonstruktor", setzt die Variablen, validiert, ...
    // ...
}

// erstellt einen Peter
public Person(String name) {
    this(name, "Peter");
}

// erstellt einen Peter Müller
public Person() {
    this("Müller");
}

Wenn ich nun einen Peter Müller mit dem dritten Konstruktor erzeuge, ruft dieser den zweiten und der zweite wiederum den ersten auf. Somit muss ich Standardparameter nicht mehrfach angeben - auch wenn diese meist als Konstanten ausgelagert werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
V Was soll alles in den Konstruktor? Java Basics - Anfänger-Themen 3
J Objektwerte addieren / Konstruktor Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben