Sharing-class-Eigenschaften in Java
Betrachten Sie dieses Beispiel :
public class Shared {
private int attribute;
public Shared() {}
public void incrementAttribute(int i) {
attribute += i;
}
public int getAttribute() {
return attribute;
}
public static void main(String[] args) {
Shared s1 = new Shared();
Shared s2 = new Shared();
s1.incrementAttribute(1);
s2.incrementAttribute(1);
s1.getAttribute();
s2.getAttribute();
}
}
Wie kann ich das ändern dieser Klasse 1
2
im Ausgang bei Aufruf getAttribute()
und nicht 1
1
Etwas wie eine Globale variable, die ich habe versucht, die final
Schlüsselwort, aber ich kann nicht festlegen etwas, das mit einer Methode, die.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie das Attribut
static
.Mitglieder deklariert sind
static
wird gemeinsam von allen Instanzen der Klasse.Auch, für Sie zum Ausgang
1 2
Sie ändern müssenzu
ideone.com demonstration
Stellen Sie das Attribut variable
static
.Du eigentlich schon angedeutet, die Lösung mit dem Frage-Titel "Teilen Klasse Attribute in Java".
In deinem Beispiel
attribute
ist eine Instanz-variable, was bedeutet, dass jede Instanz IhreShared
Klasse (s1
unds2
) bekommt eine eigene Kopie der variable und werden Sie aktualisiert selbstständig.Was Sie brauchen, ist eine Klassenvariable, d.h. etwas, das geteilt wird von allen Instanzen einer Klasse. In Java-diese ist auch als eine statische variable. Fügen Sie die
static
Schlüsselwort, um Ihre Erklärung desattribute
variable zu ändern, die von einer Instanz-variable eine Klassenvariable:—Beachten Sie, dass müssen Sie auch ausdrucken, die sofort den Wert nach dem Inkrementieren, sonst bekommen Sie den Ausgang 2 2.
Wenn Sie die variable
static
es wird gemeinsam von allen Instanzen der Klasse, die ist, was Sie benötigen in Ihrem Beispiel. Zu geben, einige Klarstellungen im Hinblick auf diefinal
Stichwort, das Sie versuchte - diefinal
Schlüsselwort wird verwendet, um eine variable nur einmal initialisiert werden. Für eine Klasse member-Variablen, wie Sie oben definiert:muss es initialisiert werden, entweder bei der Deklaration oder im Konstruktor der Klasse - das ist, warum Sie nicht in der Lage waren einen Wert zuweisen, um es innerhalb einer Methode.
Als Ihr Attribut ist ein Instanz-Feld, jedes Objekt, das Sie erstellen, wird eine Instanz-Attribut-Feld mit Ihnen. Also, wenn Sie erstellen 2 Objekte s1 und s2 beide haben individuelle Attribut-Feld.
Wenn Sie wollen Wert haben, teilen sich alle Instanzen der Klasse, die Sie benötigen, auf Klassen-Ebene Felder, für die Sie haben zu erklären, dass die Attribut-variable als statisch, und der Wert der it wird davon abhängen, alle Beispiel-Aufruf von Inkrement-Methode.