Bei der Verwendung der statischen Methode und Feld?
Ich weiß, was statisch ist, aber einfach nicht wissen, Wann es zu benutzen.
statische variable:
Ich nur verwendet es für eine Konstante Felder. Manchmal gibt es Dutzende von Konstanten in einer Klasse, so dass die Verwendung von statischen Konstanten können sparen Sie viel Speicher. Gibt es noch andere Anwendungsfälle?
statische Methode:
Ich benutze es, wenn ich eine Klasse über algorithmen. Zum Beispiel eine Klasse, die verschiedene Sortier-algorithmen. Ist es gegen OOP-design? Ich denke, es ist besser zu pflegen auf diese Weise eher als Umsetzung von algorithmen zur Sortierung innerhalb jeder Klasse, die Sie benutzen muß. Bin ich falsch? Was sind einige gute use cases?
Außerdem gibt es keine performance-Unterschied zwischen statische und nicht-statische Felder/Methoden?
InformationsquelleAutor Alex | 2013-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beschreiben Sie Fälle, in denen Sie verwendet habe, static, aber diese nicht ganz erklären grundsätzlich, warum Sie verwenden würden, statische vs. nicht-statische - Sie sind mehr als nur Schlagworte für Konstanten und Methoden.
Wenn etwas nicht statisch (instance), bedeutet es, dass es eine Instanz für jede Instanz der Klasse. Jeder kann unabhängig voneinander geändert werden können.
Wenn etwas statisch ist, es bedeutet, es ist nur ein Exemplar für alle Instanzen der Klasse, so dass Sie es von jedem Ort, wirkt sich auf alle anderen.
Statische Variablen/Methoden in der Regel verwenden weniger Speicher, weil es ist nur eine Kopie, unabhängig davon, wie viele Instanzen der Klasse, die Sie haben. Statik, wenn richtig eingesetzt, sind völlig in Ordnung, im Objekt-orientierten design.
Wenn du eine Methode/variable, Sie brauchen nur eine Instanz (z.B. eine Konstante oder eine utility-Methode), dann ist es nur statisch. Aber verstehen, dass eine statische Methode bedeutet, dass es nicht überschrieben werden kann. Also, wenn Sie eine Methode überschreiben wollen, die in einer Unterklasse, dann machen Sie es nicht statisch.
Allgemeine Faustregel ist - wenn Sie benötigen nur eine Kopie, machen es statisch. Wenn Sie eine Kopie pro Instanz, dann machen Sie es nicht statisch.
static
bedeutet nichtfinal
für Methoden. Es können weiterhin überschrieben werden ("verstecken"), aber die Methode der Klasse aufgerufen, abhängig von der Klasse, dass er aufgerufen wird. docs.oracle.com/javase/tutorial/java/IandI/override.htmlüberschreiben und verbergen sind unterschiedlich, wie beschrieben in deinem link
InformationsquelleAutor Jeff Storey
Gibt es noch andere Anwendungsfälle?
Globale Variablen
Ist es gegen OOP design?
Nicht genau das der Punkt ist, dass statische Methoden sind staatenlos, da Sie nicht brauchen, eine bestimmte Instanz einer Klasse. Mein favorisierter Ansatz ist für utility-Methoden (wie Apache Commons). Aber Sie können sich bewusst sein, dass einige Methoden besser platziert als die Schüler statt statisch.
Auch statische Methoden der Klasse Testbarkeit schwieriger, wenn Sie nicht diese Methoden überschreiben oder ersetzen von mock-Implementierung.
Performance Unterschied ?
Gibt es einen performance-Android-Empfehlung von Google, der sagt "lieber statisch über ein virtual":
http://developer.android.com/training/articles/perf-tips.html#PreferStatic
Ich bin nicht sicher, es ist wahr für die JVM, da Android verwendet eine andere VM, aber es macht Sinn gegeben, die Gründe der link aus:
InformationsquelleAutor ivan.aguirre
Meine persönliche Faustregel ist, dass statische Dinge sind "just hanging out". Sie sind Dinge, die (disclaimer, nicht ganz richtig) sind global, aber sinnvoll mit dieses einer bestimmten Klasse.
Statische Felder sind gut, wenn du selbst finden Sie laden einige Schwergewichts-Objekten wiederholt. Zum Beispiel, das Projekt an dem ich arbeite, hat nun ein Umschalten zwischen zwei Bildern. Dies sind die statischen Felder, die geladen werden, die mit der Anwendung und im Speicher gehalten, anstatt zurückladen Sie zu jeder Zeit und lassen GC kümmern sich um die bescherung.
SoftReference
auf die Bilder, und Sie auferstehen, wenn der garbage collector nicht gelöscht, die Referenz..InformationsquelleAutor gobernador
Abgesehen von sehr speziellen Situationen, die ich verwenden statische (und Finale) Variablen für Konstanten nur. Es ist eine völlig gültig, Sie zu benutzen, natürlich.
Vermeide ich statische utility-Methoden, weil Sie es schwieriger machen, zu schreiben unit tests für den code (die Verspottung der Ergebnisse der Methode invocation). Wenn Sie beginnen mit der Entwicklung Test Driven way, dieses Thema wird ganz offensichtlich. Ich bevorzuge die Verwendung von dependency injection und singleton-beans (obwohl es hängt von Ihren Bedürfnissen und der situation).
InformationsquelleAutor MarcelK
Statischen Variablen gehören einer Klasse an, damit teilen sich alle Objekte, also die Speicherauslastung ist geringer, wenn Sie wirklich wollen, dass die Variable freigegeben werden. Wenn Sie deklarieren die variable als public und static ist, dann ist es Global für jeden verfügbar.
Statische Methoden sind in der Regel die utility-Methoden, je nach der access-modifier, können diese innerhalb einer Klasse oder in den Klassen. Statische utility-Klasse wird Ihnen helfen, reduzieren Sie die Speicherauslastung wieder, weil Sie brauchen nicht, um das Objekt zu erstellen, rufen Sie diese Methoden.
InformationsquelleAutor Juned Ahsan