Lokale Variablen static in Java?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

In Java gibt's keine freistehenden Funktionen. Die lehrbuchmäßige Antwort somit: häng deine statische Variable halt in die umschließende Klasse. Will man aber vielleicht nicht, weil die Variable wirklich nur für die eine Methode Bedeutung hat.

Zwei Tricks fallen mir ein. Erstens Closures, die in Java zwar beschränkt sind, aber für den Zweck genug können. Blödes Beispiel, mach ein Funktionsobjekt das multipliziert und sich die bisherigen Werte merkt:

Function<Integer, Integer> getMultiplier(int multiplier) {
    var cache = new ConcurrentHashMap<Integer, Integer>();
    return i -> cache.computeIfAbsent(i, (v) -> v * multiplier);
}

Und dann gibt's seit Java 16 noch eine kleine, aber interessante Änderung in der Sprache: du kannst jetzt in anonymen inneren Klassen auch statische Felder haben. Also definierst du in deiner Methode so eine Klasse mit einem statischen Feld "cache" und schon bleibt dessen Wert über Aufrufe erhalten. Probier's aus.

Ich würd sowas aber sparsam verwenden - was static ist, klebt dann auch permanent im Heap. Wenn du nicht aufpasst, ist das eine perfide Form von Memory Leak.

Static Fields in Anonymen Klassen ist aber ganz böse ;)

1
@PeterKremsner

Ja, das Potential für Missbrauch ist durchaus gegeben...andererseits auch nicht böser als die block-level statics in C++...und wenn ich ein Memoryleak debuggen muss, dann lieber in Java als in C++ :-)

0
@alfredo153

Ja das jedenfalls aber klingt mir beides nach Dingen die man zwar machen kann aber nicht machen sollte, zumal es in vielen Situationen auch anders zu lösen ist.

0

Du musst sie in der Klasse machen wie Lezurex geschrieben hat.

Der Grund ist einfach weil in Java jede Variable entweder zu einer Instanz oder zu einer Klasse gehört. Funktionen können dabei nur lokale Variablen besitzen.

Da es in Java nur Methoden von Klassen gibt und keine Funktionen wie in C macht static hier auch keine Sinn.

Ist hald eine andere Philosophie.

Du machst einfach eine static-Variable auf der Klasse. In einer Methode geht das nicht, wäre mir zumindest nicht bekannt.

Woher ich das weiß:Beruf – Informatiker Applikationsentwicklung in Ausbildung

Das Schlüsselwort static hat in C eine völlig andere Bedeutung als in C++ und Java.

In C ist es eine lokale Variable, in C++ und Java bezeichnet es eine static-Variable der Klasse. Solche Variablen sind global für alle erzeugten Objekte der Klasse identisch.

In C++ kommts genau genommen auf den Kontext an. Man kann auch in C++ static so wie in C verwenden, static in einer Klasse bewirkt eben nur etwas anderes als das static in C.

0

Wenn du in java eine Funktion schreibst, dann kannst du da doch einfach eine variable hin schreiben wie

int i=0;

Und jedes mal, wenn die Funktion aufgerufen wird, wird i erneut der Wert 0 zugewiesen.

Passt doch - wozu noch static?

Er will die Variable innerhalb der Funktion static verändern, sodass beim nächsten Aufruf nicht wieder der Standarwert gesetzt ist.

0
@Lezurex

Achsoo, ja dann kann ich deiner Antwort nur zustimmen 😂

0

Was möchtest Du wissen?