Wozu werden Konstruktoren in Java eingsetzt?

vram78

Lieutenant
Registriert
Dez. 2015
Beiträge
712
Hallo,

Also ich verstehe das Konzept dahinter nicht wirklich.

Auf dieser Seite hier: https://falconbyte.net/java-konstruktor.php

steht, dass Konstruktoren für die Erzeugung von Objekten zuständig sein sollen. Aber das brauche ich doch gar nicht.

Java:
import java.util.Scanner;

public class taschenrechner {

    public static void main(String[] args) {
        
        double Wert1, Wert2, Ergebnis;
        
        
        Scanner Wert = new Scanner(System.in);
        
        System.out.println("Wert 1");
        Wert1 = Wert.nextDouble();
        System.out.println("Wert 2");
        Wert2 = Wert.nextDouble();
        
        Ergebnis = Wert1+Wert2;
        System.out.print(Ergebnis);
    }

}

Ich habe hier die main Methode. in der Main methode Erzeuge ich ein Objekt der Klasse ,,Scanner" und übergebe die Parameter ,,System.in"

Aber ich dachte ich benötige einen Konstruktor, um Objekte zu erzeugen... Oder sehe ich das gerade komplett falsch.


MFG
 
Ja um ein Objekt einer Klasse zu instanzieren braucht sie einen Konstruktor.
In deinem Fall wird der Konstruktor von Scanner mit new Scanner() aufgerufen.

Die vorhandenen Konstruktoren für Scanner findest du hier
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

Wenn kein (öffentlicher) Konstruktor vorhanden ist, können nur statische Methoden der Klasse aufgerufen werden.
 
  • Gefällt mir
Reaktionen: vram78
vram78 schrieb:
Aber ich dachte ich benötige einen Konstruktor, um Objekte zu erzeugen... Oder sehe ich das gerade komplett falsch.

Tust Du. Wie erzeugst Du eine Instanz der Klasse "Scanner"? Rate mal, was da aufgerufen wird...

Wenn Du in Deinen eigenen Klassen keinen Konstruktor hinzufügst, wird vom Compiler ein Default Konstruktor erzeugt, damit die Klasse instanziierbar ist.
 
  • Gefällt mir
Reaktionen: vram78
Rossie schrieb:
Tust Du. Wie erzeugst Du eine Instanz der Klasse "Scanner"? Rate mal, was da aufgerufen wird...

Wenn Du in Deinen eigenen Klassen keinen Konstruktor hinzufügst, wird vom Compiler ein Default Konstruktor erzeugt, damit die Klasse instanziierbar ist.
wie lange haben Sie gebraucht, um das Konzept der Objektorientierung zu verstehen? Ich selber verstehe das Gesamtkonzept nach Jahren immer noch nicht
 
Yumix schrieb:
Wenn kein (öffentlicher) Konstruktor vorhanden ist, können nur statische Methoden der Klasse aufgerufen werden.
Kann man so nicht generell sagen, beispielweise widerspricht da das Singleton Muster. Du wolltest wohl sagen, dass eine Objekterzeugung nicht möglich ist, wobei da die Sichtbarkeit von Bedeutung ist und nicht unbedingt auf öffentliche Sichtbarkeit beschränkt sein muss.
 
Nicht nur Singleton, sondern auch factory usw.
Du rufst den Konstruktor halt nicht direkt auf
 
"beispielsweise"
Im Endeffekt ist es egal ob der Konstruktor direkt aufgerufen wird.
 
In Java gibt es ein paar Klassen, die nicht instanziierbar sind, z.B. Void. Um das zu erreichen, wird der Konstruktor auf private gesetzt.

Umgekehrt bedeutet private im Konstruktor nicht automatisch, dass das die Klasse nicht instanziierbar ist. Es verhindert nur die Erzeugung von Objekten mittels new-Operator von außerhalb der Klasse.
 
chithanh schrieb:
In Java gibt es ein paar Klassen, die nicht instanziierbar sind, z.B. Void. Um das zu erreichen, wird der Konstruktor auf private gesetzt.

Umgekehrt bedeutet private im Konstruktor nicht automatisch, dass das die Klasse nicht instanziierbar ist. Es verhindert nur die Erzeugung von Objekten mittels new-Operator von außerhalb der Klasse.
ich wusste gar nicht, dass void eine klasse ist
 
chithanh schrieb:
In Java gibt es ein paar Klassen, die nicht instanziierbar sind, z.B. Void. Um das zu erreichen, wird der Konstruktor auf private gesetzt.
Das Schlimme (oder Schöne?) daran ist, dass in JAVA über Reflexion auch Void Objekte erzeugt werden können.

@vram78
void und Void nicht verwechseln
 
vram78 schrieb:
Ich selber verstehe das Gesamtkonzept nach Jahren immer noch nicht
Diese Jahre waren aber nicht mit einer objektorientierten Sprache gefüllt. ;)
Das merkt man an deinem Beispiel oben mit dem Taschenrechner. Soll das eine Lösung zu einer Aufgabe sein?
Das ist nicht wirklich objektorientiert.
Du kannst dir das auch physisch vorstellen:
Du willst etwas berechnen? Du besorgst dir einen Taschenrechner und stellst ihn dir auf den Schreibtisch.
Das macht der Konstruktor meinTaschenrechner = new Taschenrechner(). Einer neuer Taschenrechner wurde erschaffen.
Jetzt drückst du Tasten auf deinem Taschenrechner, intern passiert da was, er rechnet.
Das machst du bei deiner Klasse Taschenrechner mit Methoden - addieren(), multiplizieren(), usw.
Objektorientiert wäre also: ergebnis = meinTaschenrechner.addieren(wert1, wert2)

Als Anfänger läuft einem oft als Aufgabe die Klasse "Bruch" zum bruchrechnen über den Weg. Die ist imho gut geeignet, das Konzept zu begreifen. Vielleicht sucht du mal eine solche Aufgabe.
Du brauchst nicht Jahre, sondern nur Tage mit solchen Aufgaben, bis der Groschen fällt - keine Sorge. :)
 
  • Gefällt mir
Reaktionen: vram78
Objektorientierung braucht man nicht, aber ohne versteht keiner den Code.
Es ist ein Element zur Strukturierung.

Mit neuen Java Versionen kommt auch meist nichts wirklich neues, es wird nur komfortabler.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben