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
Antwort
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.
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)
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. –
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.
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.
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. –
- 1. Deklarieren von JavaScript-Variablen als spezifischer Typ
- 2. Warum WebMethod als Static deklariert?
- 3. JAXB als Abhängigkeit deklarieren. Warum?
- 4. Deklarieren von Variablen mehrmals
- 5. Deklarieren einer Variablen als mehr als eine Schnittstelle
- 6. Deklarieren von Variablen in Ruby?
- 7. Warum eine Schnittstelle als abstrakt deklarieren?
- 8. Eigenschaft als Objekt deklarieren?
- 9. FPC Compile als Static Library
- 10. Sollte ich injizierte Variablen in Java EE als transient deklarieren?
- 11. Warum können wir statische Variablen nicht innerhalb eines Funktionskörpers deklarieren, selbst wenn die Funktion statisch ist?
- 12. Warum deklarieren wir Konstanten immer als Potenzen von 2?
- 13. Injection-Felder als statisch deklarieren
- 14. Warum kann ich im unmittelbaren Fenster keine neuen Variablen deklarieren?
- 15. Karte nicht als const deklarieren und zuweisen
- 16. 'static void' als Decl-specifier
- 17. Deklarieren von Variablen - Best Practices
- 18. ES6/JavaScript - Variablen ohne let/const deklarieren
- 19. Klasse funktioniert, ohne Variablen zu deklarieren?
- 20. Deklarieren von Variablen ohne Wert
- 21. JS Variablen deklarieren und getElementById() verwenden
- 22. Wo muss ich statische Variablen deklarieren?
- 23. Objekte verspotten - alle Methoden als virtuell deklarieren oder Schnittstelle benutzen?
- 24. Warum sollte man eine Java-Interface-Methode als abstrakt deklarieren?
- 25. Deklarieren und Verwenden von MySQL varchar Variablen
- 26. Sind Unamed Variablen in Function Call Static
- 27. Deklarieren von privaten Variablen innerhalb von
- 28. mit try catch beim deklarieren von Variablen
- 29. PHP - warum konnte ich statische const Variable nicht deklarieren?
- 30. Warum jQuery zweimal deklarieren?
Weitere Programme schreiben. Sie benötigen nicht statische Variablen, um Objekte ordnungsgemäß zu verwenden. –
Hier finden Sie eine Antwort auf diese Frage http://stackoverflow.com/questions/7026507/why-are-static-variables-considered-evil – Mitiku
Wenn Sie mehr als ein Objekt eines Typs haben möchten, z. zwei Strings, mit unterschiedlichen Inhalten, können Sie keine statischen Felder verwenden. –