# Was genau ist ein Standardkonstruktor



## angie0408 (13. Jun 2017)

Hallo,

die beste Erklärung dazu die ich gefunden habe ist diese hier:

*Standardkonstruktor*
Der Konstrukter in der main() Methode wurde hier verwendet:

_HalloObjekt einObjekt = new HalloObjekt();    // ein HalloObjekt wird erzeugt.

Aber, hier ist die Klassendefinition von HalloObjekt:

class HalloObjekt
{
  void sprich()
  {
   System.out.println("Hallo von einem Objekt!");
  }
}_

Es wird kein Konstruktor in der Klassendefinition beschrieben. Das ist in Ordnung. Eine Klasse wird sogar dann einen Konstruktor haben, wenn er nicht explizit in die Klassendefinition aufgenommen wurde. Wenn die Klassendefinition keinen Konstruktor enthält, wird vom Java Compiler automatisch ein *Standardkonstruktor* zur Verfügung gestellt.

Die Klassendefinition von HalloObjekt enthält keinen Konstruktor. Aber der Compiler enthält etwas ähnliches wie:

_class HalloObjekt
{
  HalloObjekt()  // Standardkonstruktor
  {
  }

  void sprich()
  {
   System.out.println("Hallo von einem Objekt!");
  }
}

_
jedoch wird immernoch nicht erklärt wofür genau ich einen Standardkonstruktor brauche und was er genau macht.

Danke schonmal


----------



## Robat (13. Jun 2017)

Generell kann man sagen dass ein Konstruktor dafür da ist eine Instanz einer Klasse zu erstellen.
Der so genannte Default-Konstruktor macht auch nur das.


```
public Foo() { }
```

Natürlich kannst du auch Konstruktoren erstellen die mehr machen, z.B. Parameter mit übergeben o.ä.

```
private int x;

public Foo(int x) {
     this.x = x;
}
```


----------



## Frithjof (13. Jun 2017)

Stell es dir so vor:
Eine Klasse ist eine Beschreibung von etwas.
Zum beispiel einem Menschen, er kann reden, Hören, Laufen...
Reden hören Laufen sind Methoden.
Eine Klasse beschreibt also erstmal die Möglichkeiten die es gibt.
In deinem Code erstellst du ein Objekte. Jedes Objekt ist ein "Abbild einer Klasse"
Zum beispiel Babara, Jan und Paul.

Wenn du das machst schreibst du sowas wie:
Mensch paul = new Mensch();
Dabei wird ein neuer Mensch erzeugt.
Während er erzeugt wird passiert ja irgendwas.
Das was passiert macht der Standardkonstruktor.
In einer Klasse wird der Standardkonstruktor mit public Klassenname (){...} angegeben.
Nehmen wir mal an jeder Mensch der erzeugt wird soll reden können.
Dann wäre eine Eigenschaft von einem  Mensch kann_reden = true;
Dieser wert muss beim erstellen des Menschen gesetzt werden.
Das kann man in einem Standardconstructor machen.
Das wäre dann sowas wie:

```
public class Mensch {
    boolean kann_reden;

    public Mensch() {
        kann_reden = true;
    }

    public void hoeren(String wort) {
        // Was passiert wenn er Hört

    }
    public String sagen(){
        return "Hallo";
    }
}
}
```
Und jedesmal wenn man einen neuen Menschen als Objekt erstellt wird automatisch kann_reden auf wahr gesetzt.
Er führt also Aufgaben aus die jedesmal dann ausgeführt werden sollen wenn ein neues Objekt erstellt wird.


----------



## angie0408 (13. Jun 2017)

Danke super erklärt 

Und was macht der Standardkonstruktor wenn man selbst keinen erstellt?
Dann wird ja im Hintergrund trotzdem einer erstellt. Aber was macht der dann?


----------



## looparda (13. Jun 2017)

angie0408 hat gesagt.:


> Aber was macht der dann?


Der Standardkonstruktor ist:

```
public Klassenname (){}
```
Es wird genau das ausgeführt, was in der Implementierung des Konstruktors steht. Also in diesem Fall nichts. (Abgesehen vom impliziten Super-Konstruktoraufruf)


----------



## angie0408 (14. Jun 2017)

Und wofür brauche ich ihn dann wenn er nichts ausführt?


----------



## Viktim (14. Jun 2017)

angie0408 hat gesagt.:


> Und wofür brauche ich ihn dann wenn er nichts ausführt?


Ich finde ja das hier ganz gut erklährt 
http://www.gailer-net.de/tutorials/java/Notes/chap30/ch30_13.html


----------



## Robat (14. Jun 2017)

Er führt ja was aus.
Implizit wird super() aufgerufen


----------



## Viktim (14. Jun 2017)

Robat hat gesagt.:


> Er führt ja was aus.
> Implizit wird super() aufgerufen


Nicht nur (siehe Link) 

Und nochmal zur Erklährung:

super() ist der Konstruktor der Klasse von der mit "extends" geerbt wird. Und der kann da ja theoretisch was drin stehen haben 
Das spart dir dann einen Konsturkor wo nur "super()" aufgerufen wird in jeder Klasse wo Vererbung eingesetzt wird.


----------



## angie0408 (14. Jun 2017)

In dem Link wirds super erklärt danke


----------



## newProgrammer (14. Jun 2017)

Mit einem Konstruktor kannst du Exemplare eines Objekts in einen Anfangszustand versetzen. Wenn du keinen Konstruktor implementiert hast (nur dann), wird vom Compiler ein Konstruktor in dein Programm"eingefügt". außerdem muss er denselben namen haben wie die klasse in der er steht. Mit this  teilst du dem Programm mit, dass du etwas dem konstruktor hinzufügen willst. siehe unten..
Der Konstruktor wird in Java durch die () hinter einer objektvariable dargestellt. Darin kannst du variablen übergeben:

Bsp: 
public class Person {
String name;
int alter;

  public Person (String name, int alter){
               this.name = name;
               this.alter = alter;
}
}


und in der main dann: 
Person person1 = new Person("deinName", 18);
Sysout(person1.name + sysout person1.alter);


ps: etwas spät, aber vielleicht hilft es dir ja doch noch weiter 

Lg


----------

