Wir schreiben immer:
public static final int A = 0;
Frage:
- Ist
static final
die einzige Möglichkeit, eine Konstante in einer Klasse zu deklarieren ? - Wenn ich
public final int A = 0;
stattdessen schreibe , ist dasA
immer noch eine Konstante oder nur ein Instanzfeld ? - Was ist eine Instanzvariable ? Was ist der Unterschied zwischen einer Instanzvariablen und einem Instanzfeld ?
Antworten:
enum
Typ in Java 5 und höher für den von Ihnen beschriebenen Zweck verwenden. Es ist typsicher.Wenn Sie über den Unterschied zwischen Instanzvariable und Klassenvariable sprechen, existiert eine Instanzvariable pro erstelltem Objekt. Während die Klassenvariable unabhängig von der Anzahl der erstellten Objekte nur eine Kopie pro Klassenladeprogramm hat.
Java 5 und höher
enum
Typpublic enum Color{ RED("Red"), GREEN("Green"); private Color(String color){ this.color = color; } private String color; public String getColor(){ return this.color; } public String toString(){ return this.color; } }
Wenn Sie den Wert der von Ihnen erstellten Aufzählung ändern möchten, geben Sie eine Mutator-Methode an.
public enum Color{ RED("Red"), GREEN("Green"); private Color(String color){ this.color = color; } private String color; public String getColor(){ return this.color; } public void setColor(String color){ this.color = color; } public String toString(){ return this.color; } }
Beispiel für den Zugriff:
public static void main(String args[]){ System.out.println(Color.RED.getColor()); // or System.out.println(Color.GREEN); }
quelle
final
bedeutet, dass der Wert nach der Initialisierung nicht mehr geändert werden kann. Das macht ihn zu einer Konstanten.static
bedeutet, dass anstelle von Speicherplatz für das Feld in jedem Objekt nur eine Instanz für die Klasse erstellt wird.Bedeutet
static final
also nur eine Instanz der Variablen, egal wie viele Objekte erstellt werden, und der Wert dieser Variablen kann sich niemals ändern.quelle
final
klingt aber für mich wie "schreibgeschütztes Feld" und eine "Konstante" sollte zur Kompilierungszeit konstant seinfinal int
kann nicht in einerswitch
Anweisung verwendet werden, was mich zu der Annahme führt, dass afinal int
keine Konstante für die Kompilierungszeit ist.Alles, was ist,
static
ist in der Klassenstufe. Sie müssen keine Instanz erstellen, um auf statische Felder / Methoden zugreifen zu können. Die statische Variable wird beim Laden der Klasse einmal erstellt.Instanzvariablen sind die dem Objekt zugeordnete Variable. Dies bedeutet, dass für jedes von Ihnen erstellte Objekt Instanzvariablen erstellt werden. Alle Objekte haben eine separate Kopie der Instanzvariablen für sich.
In Ihrem Fall, wenn Sie es als deklariert haben
static final
, ist dies nur eine Kopie der Variablen. Wenn Sie es von mehreren Instanzen aus ändern, wird dieselbe Variable aktualisiert (Sie haben jedoch einefinal
Variable, sodass sie nicht aktualisiert werden kann).Im zweiten Fall ist das
final int a
ebenfalls konstant, wird jedoch jedes Mal erstellt, wenn Sie eine Instanz der Klasse erstellen, in der diese Variable deklariert ist.Schauen Sie sich dieses Java-Tutorial zum besseren Verständnis an.
quelle