private static final vs private final
Diese Frage gestellt wurde hier. Wie pro die Antwort :
private final int NUMBER = 10;
Wenn es sich nicht ändern kann, es hat keinen Sinn, eine Kopie pro Instanz.
Meine Zweifel, was ist, wenn Instanz der Klasse erstellt wurde, sagen wir einmal am Tag und es dauert etwa ein paar Sekunden. Ist es eine gute Idee, um die int(in einigen Fällen-Objekt) im Speicher?
Vorausgesetzt, es sind viele (20-30) solche Objekte.
- Ihre Frage jetzt, ist der Umgang mit vorzeitiger Optimierung. Wenn Sie wirklich wollen, in Frage zu stellen, dann werden Sie brauchen, um mit realistischen zahlen für einige bestehende Speicher-beschränkten embedded-Gerät.
- Vereinbaren Sie mit skiwi. Spielt es eine Rolle? Who cares? Garbage collection ist mehr als fähig, den Umgang mit solchen "Abfall".
- Nur denken Sie daran:
private
Modifikator bedeutet, dass nur (Instanzen) dieser Klasse können zugreifen und ändern Sie die Eigenschaft.final
bedeutet, dass der Wert nicht mehr geändert werden, nachdem der Objekterstellung. So, es sei denn, Sie setzen den Wert im Konstruktor (Letzte zulässige moment) der Wert ist gong werden die gleichen für alle Instanzen der Klasse - ich.e Sie können auch erklärenstatic
- In der Tat, angesichts der Speicherverbrauch ist in der Tat etwas verfrüht-Optimierung. Es sollte nicht berücksichtigt werden. Was ja viel wichtiger ist, ist die design-Frage. Wo kommt das Feld gehören? Für die Klasse oder für jede Instanz? Zum Beispiel: Ist es eine Konstante, die gibt nur einen Magie-Wert, der im Rahmen dieser Klasse, einen Namen? Dann machen Sie es statisch; es gehört zu der Klasse. Nachdem dies gesagt ist, glaube ich, fast alle final-Felder initialisiert werden bei der Deklaration sind solche Konstanten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie die Informationen gespeichert, die sehr davon abhängt, was es soll für verwendet werden.
Gibt es ein paar Ansätze, die Sie nehmen könnte:
private static final
Dies ist eine gute Wahl, wenn der Wert niemals verändert werden, während die Lebensdauer der Anwendung. Es bedeutet,, wenn Sie bei der Erstellung mehrerer Instanzen, Sie werden eigentlich nur durch die Speicherung dieser bestimmten variable EINMAL.
private final
Bedeutete dies für jene Zeiten, wenn der Wert möglicherweise verschiedenen Werten für verschiedene Instanzen des Objekts, aber jede spezifische Instanz wird nicht über einen Wert geändert, während das Objekt die Lebensdauer.
Wenn Sie auf etwas, die kann sich auf verschiedene Werte über einen Bereich von Zeit, dann könnte dies für Sie von Interesse sein.
public static int GetNumber(){...}
Eine andere mögliche Methode ist eine statische Methode den Rückgabewert sind Sie nach. Dies macht es leicht, mit Veränderungen umzugehen in den Wert, aber Sie müssen auch prüfen, die Wirkung einer solchen änderung über die gesamte Lebensdauer einer bestimmten Instanz.
Hoffe, das hilft...
Bezüglich
private final int number
Ihre Behauptung, dassist absolut falsch. Betrachten Sie diesen code, die typisch für eine immutable Klasse:
Gibt es viele Instanzen dieses Musters in das JDK, und in der Produktion von code-Klassen rund um den Globus.
Zur Beantwortung Ihrer Frage über die Leistung, ich bezweifle, dass Sie könnte den Unterschied Messen zwischen der Verwendung statischer vs Instanz Konstanten.