2016-05-07 14 views
2

Ich bin neu in Java und vor kurzem habe ich über statische Variablen untersucht. Ich habe erfahren, dass für eine statische Variable Speicher nur einmal vergeben wird. Dies bedeutet, dass es eine Menge Speicher sparen wird.Meine Frage ist, dass wenn statische Variablen Speicher sparen, warum nicht jede Variable als statisch deklarieren. Dies spart beim Erstellen einer Anwendung viel Speicherplatz. Entschuldigen Sie, wenn das eine dumme Frage ist, aber eigentlich bin ich nur ein bisschen neugierig.warum nicht alle Variablen als Static deklarieren

+1

Weitere Programme schreiben. Sie benötigen nicht statische Variablen, um Objekte ordnungsgemäß zu verwenden. –

+1

Hier finden Sie eine Antwort auf diese Frage http://stackoverflow.com/questions/7026507/why-are-static-variables-considered-evil – Mitiku

+2

Wenn Sie mehr als ein Objekt eines Typs haben möchten, z. zwei Strings, mit unterschiedlichen Inhalten, können Sie keine statischen Felder verwenden. –

Antwort

0

Der Punkt beim Erstellen von Attributen/Variablen ist, dass Sie sie als "Feature" für das Objekt wollen. Wenn Sie zum Beispiel eine Klasse "Auto" haben, möchten Sie vielleicht, dass eine Variable die Farbe des Autos referenziert.

Das Problem ist, dass jede Instanz von "Car" (in der realen Welt wird es jedes andere Auto sein) einen Wert hat, so dass jeder eine "unabhängige" Variable sein muss.

Sie können statische Variablen für diejenigen verwenden, die von allen Objekten dieser Klasse gemeinsam genutzt werden. Zum Beispiel, ein Zähler, um festzustellen, wie viele Autos da sind. Diese Variable gehört zu der Klasse "Car", aber nicht zu einer bestimmten Instanz dieser Klasse.

1

Es ist die Grundlagen von OOP. Schauen Sie sich ein Beispiel:

class Person { 
    public String name = "Foo"; 
} 

Feld name nicht statisch ist, bedeutet es, dass Objekte der Klasse Person wird es nicht teilen und jede Person wird es eigenen Namen. Und wenn Sie den Namen ändern, bleiben andere unberührt. Aber wenn Sie es statisch machen:

class Person { 
    public static String name = "Foo"; 
} 

Es bedeutet, dass alle Personen den gleichen Namen, die irgendwie seltsam ist, sind Sie einverstanden)

+0

Vielen Dank für Ihre Antwort. Wie auch immer, ich habe studiert, dass das letzte Schlüsselwort in Java den Wert der Variablen statisch macht. Das heißt, wir können den Wert der Variablen nicht ändern, sobald sie deklariert ist, was Ihrem Fall ziemlich ähnlich ist. Aber im Falle eines statischen Schlüsselworts können wir den Wert dieser Variablen ändern. Nur der Speicher wird einmal vergeben. Das macht mich verwirrt. –

0

statische Variable pro Klassenstufe erstellt?. Es wird nicht erstellt, wenn ein Objekt der Klasse erstellt wird. Für jede Instanz oder jedes Objekt der Klasse gibt es nur einen Wert einer statischen Elementvariablen. Dies verhindert den Zweck, Objekte zu haben und eine Anwendung um Objekte herum zu erzeugen.

0

Ja, es würde Speicher einmal im Lebenszyklus zugeordnet werden und wird als Klassenvariable bezeichnet. Auf eine Klassenvariable kann direkt mit der Klasse zugegriffen werden, ohne dass eine Instanz erstellt werden muss. Dies würde bedeuten, dass von überall und überall zugegriffen werden kann. Außerdem würde die Speicherzuordnung dazu führen, dass die Variablen, selbst wenn sie nicht an vielen Stellen im Code verwendet werden, für immer im Speicher verbleiben würden, solange das Programm ausgeführt wird und unnötigen Speicherplatz einnehmen würde.

+0

kleine (wenn überhaupt) Optimierung auf diese Weise oft brechen Regeln der OOP, geben schlechte Software-Qualität etc. Richtiger Ort für solche Diskussion ist allgemeine OOP, keine Sprache. –

Verwandte Themen