Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich würde gerne, dass, nachdem ich ein Objekt erstellt habe, dieses Objekt dann in mehreren Methoden verfügbar ist. Welche Ansätze gibt es da?
Außerdem: Wenn ich ein Objekt als statisch deklariere, dann kann ich es in einer Methode verwenden, ohne es in der Methode selber instanziiert zu haben. Ist das die Lösung meines Problems? Falls ja, was genau heißt es ein Objekt als statisch zu deklarieren? Ich kenne das nur so, dass man Methoden und Attribute als statisch deklariert.
"this.myObjekt" ist ne Möglichkeit die du dir anschauen solltest das kommt sehr oft in oop vor
...statisch ist nicht sooo toll sollte man "gar nicht machen" ausser bei der main natürlich
ausnahmen gibts natürlich... wenn du PI als final static festlegst "kann es Sinn machen" zb...(Obwohl man eh Math.PI hat)
Die saubere Lösung ist es Abhängigkeiten über den Konstruktor der Klasse zu übergeben. Das bedeutet, wenn eine Klasse die Instanz einer anderen Klasse unbedingt braucht, dann sollte sie über den Konstruktor direkt beim Erzeugen des Objektes mit angegeben werden, so dass das Objekt nach der Erzeugung funktionsfähig ist. Das ist auch guter Stil, weil die Klasse dem Benutzer sofort mitteilt, von welchen anderen Klasse sie abhängig ist.
Handelt es sich um eine optionale Abhängigkeit, dann evtl. mit einem überladenen Konstruktor oder per Setter.
Ein Beispiel dafür wäre die Scanner Klasse. Da gibt es einen Konstruktor der die Angabe eines InputStreams erfordert.
Bei "static" sollte die Grundregel sein, es nur bei main() zu verwenden. Natürlich gibt es auch Ausnahmen, wo "static" ebenfalls notwendig oder sinnvoll ist. Eine davon wären Konstanten, die i.d.R. immer "public/private final static" deklariert werden. Eine statische Variable oder Methode gehört nicht zur Instanz sondern zur Klasse. Darum nennt man sie häufig auch Klassenvariable oder Klassenmethode. Eine Klassenvariable gibt es sozusagen nur einmal für die Klasse. Auch, wenn du mehrere Instanzen dieser Klasse erzeugst, wird sie in allen Instanzen den selben Wert haben.
Java:
class Person {
static String name;
Person(String name) {
this.name = name;
}
}
Person hans = new Person("Hans");
Person felix = new Person("Felix");
System.out.println(hans.name); // Ausgabe: Felix
System.out.println(felix.name); // Ausgabe: Felix
@temi hat das gut erklärt. Übergib das Objekt deinem Konstruktor.
Statische Datenelemente und statische Methoden sind einer Klasse als Ganzes zugeordnet und nicht einzelnen Objekten. Was man oben an dem Beispiel erkennen kann. Des weiteren unterliegen Statischen Methoden einigen Einschränkungen. Eine statische Methode
kann nur auf statische Datenelmente direkt zugreifen
kann nur andere statische Methoden direkt aufrufen
kann this nicht benutzen, weil es kein Zielobjekt gibt
wird nicht dynamisch gebunden
Anfangs ist man versucht alles static zu deklarieren, das führt die Objektorientierung aber ad absurdum.
Funktioniert das überhaupt ein Objekt als static zu deklarieren und mit diesem Objekt zu arbeiten? Da bin ich auch überfragt, so etwas hab ich noch nie ausprobiert. Vielleicht kann da drauf noch jemand erfahrenes Antworten