PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : static Variable in Funktion?



Boron
24-02-2005, 09:57
Ist es in Java möglich innerhalb einer Funktion/Methode eine Variable als static zu deklarieren?
Bsp:
private void foo()
{
static int zahl = 0;

... // restlicher Code
}Ich möchte, dass die Variable Zahl bei jedem Aufruf von foo() ihren alten Wert besitzt.
Wenn ich das so schreibe, wie es in C und C++ möglich ist, dann meckert der Java-Compiler: "Illegal modifier for parameter zahl; only final is permitted"

Oder geht so etwas gar nicht, und ich muss zahl als Attribut der Klasse anlegen?

peschmae
24-02-2005, 10:58
Überrascht mich jetzt etwas aber offenbar geht das tatsächlich nicht. Da kann man wohl nix machen ausser halt eine Private Variable in der Klasse wo die Funktion ist. :(

MfG Peschmä

Borusse-KLE
24-02-2005, 13:02
hi,

also wenn ich dich richtig verstehe, willst du, das zahl immer den wert=0 hat wenn die Funktion foo aufgerufen wird. Dann lass static weg. Bei dem Aufruf der Funktion wird zahl immer auf 0 gesetzt.

Oder?

Ansonsten stimme ich dem Vorredner zu.

Boron
24-02-2005, 13:13
Nein, die Variable zahl soll nur bei ersten Betreten von foo() auf 0 gesetzt werden.
Bei allen weiteren Aufrufen von foo() hat zahl dann den veränderten Wert (uahl wird im restlichen Code verändert).

Aber es gibt wirklich keine static-Variablen in Methoden.
Ich habe jetzt halt zahl als Attribut der Klasse hinzugefügt. Das ist zwar nicht ganz das was ich wollte, aber besser geht es leider nicht.

peschmae
24-02-2005, 13:34
also wenn ich dich richtig verstehe, willst du, das zahl immer den wert=0 hat wenn die Funktion foo aufgerufen wird. Dann lass static weg. Bei dem Aufruf der Funktion wird zahl immer auf 0 gesetzt.


Auch wenn es auf den ersten Blick nicht ganz logisch erscheint ist dem in C/C++ durchaus so wie von Boron erwähnt/erwartet. Entsprechend würde man das auch von Java erwarten.

@Boron: Inwiefern ist das nicht ganz das was du wolltest? Klar, du hast unnötig eine zusätzliche private Variable. Aber solange du auf die nur aus der Methode (und fürs initialisieren evtl. aus dem Konstrutor) zugreifst ist das doch genau dasselbe?

MfG Peschmä

Boron
25-02-2005, 09:42
Eben genau aus dem Grund, dass die Variable (jetzt in Form eines Attributs) halt im gesamten Objekt sichtbar ist.
Theoretisch könnte jede Methode darauf zugreifen und verändern. Das ist das unschöne daran.

Wenn ich die Zugriffe nur in Konstruktor und die Funktion beschränke, dann ist das ja OK, aber dennoch könnte (theoretisch) jede andere Methode der Klasse das auch.

In C++ ist eine solche statische Variable in einer Methode nur in der Methode selbst sichtbar.

Ich kann damit leben, aber schön ist es nicht (Mist, ich wiederhole mich :)).

nul
25-02-2005, 12:02
Das soll doch auch nicht gehn. Laut Sun's def. ist statisch doch auf die Klasse bezogen und nicht auf ein Objekt. In funktionen existiert die Variable erst wenn die funktion aufgerufen wird und dazu muss ein objekt existieren (ausser die methode ist auch statisch - geht dort aber wahrscheinlich auch nicht - erst probieren...).