Konstruktoren

Thisor

Bekanntes Mitglied
Hey,
ich wollte für die Konstruktoren eine neue Topic erstellen, damit ich die Sachen auch auseinanderhalten kann und nicht durcheinander komme.

Was ist der Unterschied von Konstruktoren und Construktor-Injection?
Soweit ich weiß sind Konstruktoren, Attribute die weiter vererbt werden und die dann jede Kindsklasse enthalten muss.
Was ist Construktor-Injection und wo liegt da der Unterschied?
mfg
 

Joose

Top Contributor
Ein Konstruktor ist ein spezielle "Methode" welche beim Erstellen eines neuen Objektes einer Klasse aufgerufen wird.

"constructor injection" beschreibt nichts anderes als das ein Konstruktor Parameter erwartet. Sprich du willst einem Objekt Werte übergeben (injecten), dies kann über einfache Methoden (setter), den Konstruktor oder per direkt Zugriff auf das Attribut erfolgen.
 

Thisor

Bekanntes Mitglied
Okay, dann geh ich mal einen Schritt weiter: kann auch ein Interface mein Kontruktor sein?
Wenn ja, in was für eine Klasse lege ich das ein? Also normale Klasse? Eine Klasse die erbt? Eine abstrakte Klasse? Und wo, also in welcher Klasse wäre dies Sinnvoll?
 

Joose

Top Contributor
Nein ein Interface ist eine Schnittstelle, diese gibt Methoden(signaturen) vor. Die konkrete Implementierung der Methoden übernimmt dann die Klasse welche das Interface implementiert.
Und diese konkrete Klasse kann wiederum einen oder mehrere Konstruktoren haben.

Leider verstehe ich die anderen Frage nicht wirklich (bzw. deren Zusammenhang).
 

Thisor

Bekanntes Mitglied
Okay, da die Antwort nein ist, sind die folgenden Fragen auch irrelevant :)

Allerdings kommt da noch eine Frage :D
Was ist ein "constructor stub"?
dies kommt wenn man einen Konstruktor generieren lässt. Ein ganz gewöhnlicher Standart-Konstruktor oder hat stub eine Bedeutung?
 

Joose

Top Contributor
dies kommt wenn man einen Konstruktor generieren lässt. Ein ganz gewöhnlicher Standart-Konstruktor oder hat stub eine Bedeutung?
Was heißt "dies kommt wenn man einen Konstruktor generieren lässt"? Wo kommt das? Es wird dir ja nicht einfach vor den Augen erscheinen. Etwas mehr Infos zum drumherum und wie man auf die ganzen Fragen kommt wäre hilfreich.

Hier eine allg. Antwort zu "stub": https://de.wikipedia.org/wiki/Stub_(Programmierung)
 

Thisor

Bekanntes Mitglied
Ein Bsp:
ich habe dieser MutterKlasse mit folgenden Attributen
Code:
public class BibItem {

    protected int id;
    protected String titel;
}

dann gibt es die Tochterklassen Film, CD; Buch, die von der Mutter erben sollen.
Wenn ich jetzt
nur die Klasse erstelle z.b. Film und sage die erbt von der BibItem, dann sieht das ja so aus
Code:
public class Film extends BibItem{

}
Wenn ich das so jetzt stehen lasse, wird "Film" von eclipse rot unterstrichen, und wenn ich mit der Maus drüber gehe, steht folgendes : "add construktor"
Wenn ich drauf klicke, wird dann ein Konstruktor generieret mit int id und String titel.
Und als Kommentar steht gleich dabei folgendes :
// TODO Auto-generated constructor stub

so war das gemeint :)
 
K

kneitzel

Gast
Das ist einfach nur eine Funktion von eclipse. Die Entwicklungsumgebungen versuchen immer, dem Entwickler Tipparbeit abzunehmen. Das hat aber direkt mit Java nichts zu tun.
 

Joose

Top Contributor
Ja der Fehler kommt daher da die Klasse BibItem anscheinend einen Konstruktor mit X Parametern hat (keinen Default Konstruktor). Daher muss jede Kindklasse ebenfalls mindesten einen Konstruktor mit einer beliebigen Anzahl an Parametern haben (und dieser muss den Konstruktor der Superklasse aufrufen mit den entsprechenden Parametern).
http://openbook.rheinwerk-verlag.de...tml#dodtpb085bfe8-9ffe-48a2-bfb4-87c3b1b69ee8

Das Kommentar weißt eben nur auf einen generierten Code Teil hin. Bei einigen IDEs kann man beeinflussen was genau generiert wird.
 
K

kneitzel

Gast
Joose: Die Erklärung mit dem Fehler leuchtet mir ein. Denn mit dem angegebenen Code ist das alles etwas unstimmig:
a) Es ist kein Konstruktor mit Parametern angegeben, daher gibt es ja einen Standard-Konstruktor und auch eclipse sollte keinen Fehler anzeigen.
b) Wenn es einen Fehler gibt und die IDE Code generieren möchte, würde ich erwarten, dass der Fehler behoben würde und danach ein kompilieren möglich wäre. Macht Eclipse das nicht? (Evtl. bin ich auch einfach zu verwöhnt von meinen IDEs. IntelliJ zu, Beispiel generiert dann sowas:
Code:
public class ChildClass extends BaseClass  {
    public ChildClass(int i) {
        super(i);
    }
}
bei einer BaseClass von:
Code:
public class BaseClass {
    public BaseClass(int i) { }
}

(Und sorry, für HiJacking des Threads mit diesem Eclipse Thema).
 

Meniskusschaden

Top Contributor
Macht Eclipse das nicht? (Evtl. bin ich auch einfach zu verwöhnt von meinen IDEs. IntelliJ zu, Beispiel generiert dann sowas:
Java:
public class ChildClass extends BaseClass  {
    public ChildClass(int i) {
        super(i);
    }
}
Nein, Eclipse zeigt nur die oben genannte Fehlermeldung, bietet aber einen QuickFix mit Lösungsvorschlägen an. Da kann man einen Konstruktor anhand der Superklasse generieren lassen. Was macht IntelliJ eigentlich, wenn es in der Superklasse mehrere Konstruktoren gibt?
 
K

kneitzel

Gast
Dann ist es in eclipse ähnlich wie in IntelliJ. Es wird der Fehler gezeigt und dann hat man ein Popup Menü, über das Aktionen ausgewählt werden können. Und da kann man dann den Konstruktor erzeugen lassen. Wenn mehrere Konstruktoren in Frage kommen, dann bekommt man ein Popup Fenster zur Auswahl der gewünschten Konstruktoren, in dem man dann ein oder mehrere Konstruktoren auswählen kann.
 

Meniskusschaden

Top Contributor
Dann ist es wirklich ähnlich. Alerdings kann man in Eclipse wenn QuickFix mehrere Konstruktoren vorschlägt, nur einen auswählen. Danach ist der Fehler behoben, so dass kein QuickFix mehr angeboten wird. Man kann aber immer (auch ohne Fehlermeldung) die Funktion "Generate Constructors from Superclass" aufrufen. Dort werden dann alle nicht implementierten Konstruktoren zur gleichzeitigen Auswahl angeboten.
 

Thisor

Bekanntes Mitglied
Ich habs immer noch nicht ganz so verstanden was ein Constructor-injection ist :s
Ich geb in meinem Konstruktor einen Parameter im voraus mit ein?...
Kann man dazu ein Beispiel geben?
 

Joose

Top Contributor
Die Klasse ist der Bauplan für ein Objekt. Um so ein Objekt zu erstellen braucht es einen Konstruktor. (Wenn man selbst keinen Konstruktor definiert wird beim kompilieren automatisch ein Default Konstruktor - ohne Parameter verwendet)

Es gibt nun immer wieder Objekte welche Datenvon außen brauchen. Diese Daten kannst du auf unterschiedliche Arten an das Objekt übergeben (injecten).
Eine davon ist, einen Konstruktor mit Parameter zu definieren und diese Daten direkt beim Erstellen des Objektes zu übergeben.
Eine andere Art von Injection wäre "Method injection" hierfür verwendet man dann meist "setter" Methoden
 

Thisor

Bekanntes Mitglied
Was ich nicht versthe ist, dass ich bisher immer Konstruktoren programmiert habe, die in den Parametern was drinnen stehen haben. Was genau heißt Daten von außen?
Daten extern von der Klasse? Package? Server?
Wenn ich jetzt was einlesen mag durch den BufferedReader;
Oder eben z.b. File file = new File("C:\\laufwert\\quelle"); ?
 

Joose

Top Contributor
Was ich nicht versthe ist, dass ich bisher immer Konstruktoren programmiert habe, die in den Parametern was drinnen stehen haben.
Ja da hast du per Constructor injection daten übergeben.

Was genau heißt Daten von außen?
Alle Daten welche nicht in der Klasse deklariert und initialisiert werden ;)

Daten extern von der Klasse? Package? Server?
Daten/Werte von anderen Variablen und Klassen.


Wenn ich jetzt was einlesen mag durch den BufferedReader;
Oder eben z.b. File file = new File("C:\\laufwert\\quelle"); ?
Bezogen auf diese Beispiel:
Du übergibst hier Daten an den Konstruktor der Klasse File. Du injizierst hier Daten per Konstruktor.
Die Klasse File weiß nur das sie über den Konstruktor Daten bekommt welche den Filenamen beinhalten -> sprich die Daten kommen (für die Klasse File) von außen (extern)

Sprich "constructor injection" ist nichts besonders spezielles sondern was ganz normales ;)
Man hat sich dafür halt nur einen schönen Namen ausgedacht um es besser und schneller zu beschreiben.
 

Thisor

Bekanntes Mitglied
Konstruktoren sagen doch was die Klasse enthalten soll.
Gut, vllt sollte ich noch erwähnen das ich Konstruktoren nur bei Klassen verwendet habe, die auch was geerbt habe. Daher mein Zusammenhang zur Erbung.
 

Joose

Top Contributor
Konstruktoren sagen doch was die Klasse enthalten soll.
Jein. Der Konstruktor sorgt dafür das von der Klasse ein Objekt erstellt wird, welches einen definierten Anfangszustand hat.
Bezogen auf das Beispiel der Klasse "File": Die Klasse File braucht unbedingt einen Dateinamen übergeben damit ein Objekt erstellt werden kann (mit welchen auch gearbeitet werden kann).

Sprich der Konstruktor sorgt eben dafür das man mit dem Objekt arbeiten kann, man kann danach auch noch weitere Daten hinzufügen (wie oben schon erwähnt per "set" Methoden -> das wäre dann "method injection").

Gut, vllt sollte ich noch erwähnen das ich Konstruktoren nur bei Klassen verwendet habe, die auch was geerbt habe. Daher mein Zusammenhang zur Erbung.

Das ganze gilt natürlich auch bei Klassen, welche von keinere anderen erben.
 

Joose

Top Contributor
Hier noch ein kleines Beispiel:
Java:
public class Person {
   private String name;
  
   private String adresse;
  
   /* Der Konstruktor definiert das ein Objekt der Klasse Person mindesten einen Namen haben muss!
    * Eine Adresse muss das Objekt nicht haben
    */  
   public Person(String name) {
     this.name = name;
     /* aber eine Möglichkeit wäre das setzen eines Standardwertes für die Adresse */
     // this.adresse = "keine Angabe";
   }
  
   public void setAdresse(String adresse) {
     this.adresse = adresse;
   }
  
   public String toString() {
     return "Person [name=" + name +", adresse=" + adresse + "]";
   }
  
   public static void main(String[] args) {
     Person p = new Person("Thisor"); // hier wird ein Objekt der Klasse Person erstellt. hier werden daten per construktor übergeben -> constructor injection
     System.out.println(p.toString());
     p.setAdresse("Hollywood Blvd 123"); // hier werden Daten per Methodenparameter übergeben -> method injection
     System.out.println(p.toString());
   }
}
 
K

kneitzel

Gast
Die Erzeugung von Objekten findet immer zur Laufzeit statt. Im Bereich Entwicklung gibt es nur Source Files (z.B. die java files) und die compilierten Ergebnisse (z.B. die .class files). (Ohne auf andere Ressourcen eingehen zu wollen!)

Wenn dann die Java VM gestartet wird, dann geht es erst los. Die VM lädt dann die Klassen und erstellt daraus streng genommen auch erst einmal "Objekte" - und zwar die Instanzen der Klasse Class.

Und wenn die notwendigen Klassen geladen sind, dann geht die eigentliche Applikation los - es wird dann die Funktion Main gestartet, die halt Bestandteil einer Klasse ist (daher static - denn es gibt ja nur die Instanzen von Class bis zu diesem Zeitpunkt wenn man ganz oberflächig schaut).

Konrad
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
M Methodenaufrufe im Konstruktoren Java Basics - Anfänger-Themen 31
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Konstruktoren in Initialisierungsblöcke Java Basics - Anfänger-Themen 6
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
C Die Klasse Menge mit Konstruktoren und einfachen Methoden Java Basics - Anfänger-Themen 5
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
G Was ist der Nutzen von generischen Konstruktoren? Java Basics - Anfänger-Themen 4
Q Methoden Konstruktoren anlegen Java Basics - Anfänger-Themen 5
B Objekte in Konstruktoren übergeben Java Basics - Anfänger-Themen 5
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Überladen von Konstruktoren Java Basics - Anfänger-Themen 2
V Konstruktoren Java Basics - Anfänger-Themen 15
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
F Konstruktoren Java Basics - Anfänger-Themen 4
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
Y Klassen, Vererbung, Konstruktoren Java Basics - Anfänger-Themen 13
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
C Erste Schritte Konstruktoren verstehen Java Basics - Anfänger-Themen 7
W OOP Konstruktoren Erklärung Java Basics - Anfänger-Themen 14
N Abarbeitungsreihenfolge von Konstruktoren Java Basics - Anfänger-Themen 12
O Klassen und Konstruktoren Java Basics - Anfänger-Themen 7
V Konstruktoren -> Funktionsaufrufe Java Basics - Anfänger-Themen 7
Q Konstruktoren und Methoden Java Basics - Anfänger-Themen 2
C Konstruktoren Java Basics - Anfänger-Themen 7
J Konstruktoren Java Basics - Anfänger-Themen 10
M Konstruktoren & Veerbung Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 6
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
R Vererbung Konstruktoren nicht erkannt Java Basics - Anfänger-Themen 17
H Klassen, Konstruktoren, Instanzen etc Java Basics - Anfänger-Themen 6
J OOP Konstruktoren, setMethode, getMethode usw. Java Basics - Anfänger-Themen 7
A überladene Konstruktoren Java Basics - Anfänger-Themen 7
L Frage zu Konstruktoren und dem this Operator Java Basics - Anfänger-Themen 16
W 2 Konstruktoren Java Basics - Anfänger-Themen 8
B Vererbung und Konstruktoren Java Basics - Anfänger-Themen 33
N Vererbung von Konstruktoren mit Parametern Java Basics - Anfänger-Themen 7
S Konstruktoren verketten Java Basics - Anfänger-Themen 6
A Konstruktoren sollen sich gegenseitig aufrufen Java Basics - Anfänger-Themen 10
B Konstruktoren Sichtbarkeit Java Basics - Anfänger-Themen 2
K Kann man Private-Konstruktoren doch aurufen? Java Basics - Anfänger-Themen 8
E Konstruktoren und Methoden Java Basics - Anfänger-Themen 10
E OOP individual + standard-Konstruktoren Java Basics - Anfänger-Themen 9
S Konstruktoren? Java Basics - Anfänger-Themen 5
K Konstruktoren Java Basics - Anfänger-Themen 13
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
L Geschachtelte Konstruktoren Java Basics - Anfänger-Themen 4
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
J Vererbung und Konstruktoren Java Basics - Anfänger-Themen 14
J Problem mit Konstruktoren Java Basics - Anfänger-Themen 2
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
L Konstruktoren bei Vererbung Java Basics - Anfänger-Themen 13
Z wie kann ich überladene Konstruktoren "umleiten"? Java Basics - Anfänger-Themen 11
D Blöde(?) Frage zu Konstruktoren und set-Methoden Java Basics - Anfänger-Themen 3
G Interface und Konstruktoren Java Basics - Anfänger-Themen 3
G Frage zu Konstruktoren Java Basics - Anfänger-Themen 12
G Verständnisfrage zu Konstruktoren Java Basics - Anfänger-Themen 5
G Konstruktoren Java Basics - Anfänger-Themen 9
A Konstruktoren überladen Java Basics - Anfänger-Themen 9
H Konstruktoren + Hilfe Java Basics - Anfänger-Themen 12
H Konstruktoren werden nie geerbt Java Basics - Anfänger-Themen 3
O Vor-/Nachteile/Unterschiede von Konstruktoren und Methoden Java Basics - Anfänger-Themen 3
Bierhumpen 2 Konstruktoren Java Basics - Anfänger-Themen 15
T mehrere Konstruktoren für eine Klasse Java Basics - Anfänger-Themen 7
J Instantvariablen und Konstruktoren Java Basics - Anfänger-Themen 2
Y Vererben - Konstruktoren Java Basics - Anfänger-Themen 2
Z übergabe von string[] an konstruktoren oder methoden Java Basics - Anfänger-Themen 3
L Klassen, Vererbung und Konstruktoren Java Basics - Anfänger-Themen 10
S Frage zu Konstruktoren Java Basics - Anfänger-Themen 7
G Problem mit Gültigkeit von Variabeln und Konstruktoren Java Basics - Anfänger-Themen 4
C Konstruktoren Java Basics - Anfänger-Themen 4
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben