Initialisiere die letzte Variable vor dem Konstruktor in Java

7

Gibt es eine Lösung, um eine letzte Variable in einem Java-Konstruktor zu verwenden? Das Problem ist, dass wenn ich ein letztes Feld initialisiere:

%Vor%

dann kann ich es nicht im Konstruktor verwenden. Java führt zuerst den Konstruktor und dann die Felder aus. Gibt es eine Lösung, mit der ich auf das letzte Feld im Konstruktor zugreifen kann?

    
Tobias 24.03.2009, 14:16
quelle

9 Antworten

17

Ich verstehe deine Frage nicht wirklich. Das

%Vor%

wird wie folgt ausgeführt:

%Vor%     
Johannes Weiß 24.03.2009, 14:20
quelle
15

Führen Sie die Initialisierung im Konstruktor aus, z. B.

%Vor%

Wenn Sie den Wert zur Variablendeklarationszeit tatsächlich kennen, ist es natürlich sinnvoller, ihn konstant zu machen, z. B.

%Vor%     
Hank Gay 24.03.2009 14:18
quelle
5

Wir kommen von der Frage weg.

Ja, Sie können eine Variable private final verwenden. Zum Beispiel:

%Vor%

Dies bedeutet, dass die Account-Klasse eine Abhängigkeit von den beiden Strings, Account- und Routing-Nummern hat. Die Werte dieser Klassenattribute MÜSSEN festgelegt werden, wenn die Klasse Account erstellt wird, und diese Anzahl kann nicht geändert werden, ohne eine neue Klasse zu erstellen.

Der Modifikator "final" macht die Attribute unveränderlich.

    
Steve Gelman 09.09.2011 13:59
quelle
3

Wenn Sie es statisch markieren, können Sie es im Konstruktor verwenden, aber da Sie es endgültig festgelegt haben, kann es nicht geändert werden.

%Vor%

ist es möglich, einen statischen Init-Block zu verwenden.

%Vor%

Wenn Sie versuchen, den Wert im Konstruktor zu ändern, können Sie keinen Standardwert zuweisen, oder Sie müssen ihn nicht endgültig machen.

%Vor%

oder

%Vor%     
sfossen 24.03.2009 14:21
quelle
2

In diesem Fall können Sie das Feld auch als 'statisch' markieren.

    
Outlaw Programmer 24.03.2009 14:18
quelle
2

Eine weitere Möglichkeit besteht darin, das Feld in einem Instanzinitialisierungsblock zu initialisieren:

%Vor%     
Joachim Sauer 24.03.2009 14:55
quelle
1

In diesem Fall können Sie es genauso gut statisch machen. Und Java-Konvention besteht darin, solche Konstanten in ALL_CAPS zu benennen.

    
Adam Jaskiewicz 24.03.2009 14:18
quelle
1
%Vor%

Dabei ist getName () eine statische Funktion, die Ihnen den Namen gibt.

    
daanish.rumani 24.03.2009 14:21
quelle
0
  

Ich kann es nicht im Konstruktor verwenden, während Java zuerst den Konstruktor ausführt und dann die Felder ...

Dies ist nicht korrekt, Felder werden zuerst ausgewertet, andernfalls könnten Sie auf keine Standardwerte von Elementen in Ihren Konstruktoren zugreifen, da sie nicht initialisiert würden. Dieses funktioniert :

%Vor%

Das Schlüsselwort final markiert lediglich die Elementkonstante, sie wird wie jedes andere Element behandelt.

EDIT: Versuchen Sie den Wert im Konstruktor festzulegen ? Das würde nicht funktionieren, da das Mitglied unveränderlich ist, wenn es als endgültig definiert ist.

    
soulmerge 24.03.2009 14:51
quelle