Zuweisen einer endlichen Feld in Java
Ich arbeite gerade an einer Klasse, die hat einige Felder mit final
access modifier wie: final textField
und ich darf Ihnen zuweisen forsome Grund. Wenn ich diese ändern zu static final
ich kann nicht mehr zuordnen, alles zu Ihnen (es beschwert sich, dass Sie endgültig sind, wie Sie es getan haben sollte, in den ersten Platz). Irgendwelche Ideen, warum dies geschieht ?
Beispiel für den ersten Fall:
final LabelField label_title;
label_title = new LabelField(
"Press the button to launch the speed test",
LabelField.FIELD_HCENTER);
- Können Sie Profil-ein Beispiel für den ersten Fall?
- Vielleicht ist der code, der in der Lage ist, zu weisen Sie das Feld "aus irgendeinem Grund" ist in einem Konstruktor?
- ja @winSharp93 es eigentlich ist
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuzuordnen, können Sie
final
Felder im Konstruktor können Sie nicht zuordnenstatic final
Felder in einem Konstruktor. Sie sollten nicht ändern, die statische Felder in einem Konstruktor in jedem Fall.Wenn ein Feld ist definiert als
final
wird, muss es initialisiert werden, wenn das Objekt konstruiert wird, d.h. Sie dürfen einen Wert zuweisen, um es in einem Konstruktor.Einen
static
Feld gehört zu der Klasse selbst, d.h. eine pro-Klasse. Einstatic final
Feld ist also nicht belegbar, im Konstruktor, die ein pro Objekt.Hoffe es für Euch Sinn macht!
Den Wert von final-Mitglieder können nicht geändert werden. Aber es ist erlaubt zu initialisieren Letzte Instanz-Feld im Konstruktor. Dies ist nicht zulässig für Schüler. Die nächsten Schnipsel zeigt, was ist erlaubt und was nicht erlaubt ist:
Aus der
JLS - final-Felder
: -So,
JLS
eindeutig festlegt, dass Sie zuordnen sollten Ihrestatic final
Felder im statischen Initialisierer block. Sie können nicht zuweisen, Sie in jedem Konstruktor.Also, wenn Sie einen
static final
Feld, sollten Sie entweder initialisieren Sie Sie an Ort und Stelle, oder Sie können eineStatic Initializer Block
zu initialisieren.Darüber hinaus können Sie ordnen Sie Ihre
final
Felder im Konstruktor, vorausgesetzt, dass Sie nicht ändern Sie die Zuordnung später überall..Einem statischen Feld gehört zu der Klasse, die ist (sollte sein) initialisiert, direkt nach der Klasse geladen wird, und das ist, wenn es initialisiert werden müssen (der Wert zugewiesen werden muss), wenn es final ist.
Konstruktor wird aufgerufen, wenn jemand braucht, um die Klasse instanziieren. Nun, wenn Sie ändern Sie den Wert des static final-Feld im Konstruktor bedeutet, dass Sie versuchen, zu ändern (oder neu zuzuweisen), ist es Wert.
Aber dabei, dass in einem statischen Initialisierer (
static { /* assign value here */}
) sollte in Ordnung sein, die gemeint ist für die Initialisierung der Klasse.