Konstante Zeichenfolge in Java definieren?

73

Ich habe eine Liste konstanter Zeichenfolgen, die ich während meines Java-Programms zu unterschiedlichen Zeiten anzeigen muss.

In CI könnten die Zeichenfolgen wie folgt oben in meinem Code definiert werden:

#define WELCOME_MESSAGE "Hello, welcome to the server"
#define WAIT_MESSAGE "Please wait 5 seconds"
#define EXIT_MESSAGE "Bye!"

Ich frage mich, was ist die Standardmethode, um so etwas in Java zu tun?

CSSs
quelle
4
static final String WELCOME_MESSAGE = "Hello";?
Oliver Charlesworth
4
Ja, aber ich habe einige Websites gelesen, auf denen gesagt wurde, dass "final" in Java keine Konstante ist, daher war ich mir nicht sicher.
CSSs
15
@csss finalin Java bedeutet, dass die Referenz nicht geändert werden kann - das Objekt, auf das sie verweist, jedoch möglicherweise noch geändert werden kann. Zum Glück ist StringJava eine unveränderliche Klasse, daher final Stringist a in beiden Punkten const.
Yshavit

Antworten:

130

Normalerweise definieren Sie dies oben in einer Klasse:

public static final String WELCOME_MESSAGE = "Hello, welcome to the server";

Verwenden Sie natürlich die entsprechende Mitgliedersichtbarkeit ( public/ private/ protected), je nachdem, wo Sie diese Konstante verwenden.

derekerdmann
quelle
2
Ich habe mich immer gefragt, ob es nicht unnötig ist, die Konstante als "statisch" festzulegen, wenn Sie die Konstante als "privat" definieren.
ChallengeAccepted
7
Nein, das sollte es immer noch sein static. Wenn Sie es privat und nicht statisch machen, wird jedes Mal, wenn Sie den Typ instanziieren, eine neue Kopie der Zeichenfolge erstellt. Siehe stackoverflow.com/q/1415955/247763
derekerdmann
12

Es würde so aussehen:

public static final String WELCOME_MESSAGE = "Hello, welcome to the server";

Wenn die Konstanten nur in einer einzelnen Klasse verwendet werden sollen, möchten Sie sie privatestattdessen erstellen public.

Ernest Friedman-Hill
quelle
5
public static final String YOUR_STRING_CONSTANT = "";
Repro
quelle
5

Wir deklarieren die Konstante normalerweise als static. Der Grund dafür ist, dass Java jedes Mal, wenn Sie ein Objekt der Klasse instanziieren, Kopien nicht statischer Variablen erstellt.

Wenn wir also die Konstanten staticerstellen, würde dies nicht der Fall sein und Speicherplatz sparen .

Mit können finalwir die Variable konstant machen.

Daher empfiehlt es sich, eine konstante Variable zu definieren:

private static final String YOUR_CONSTANT = "Some Value"; 

Der Zugriffsmodifikator kann private/publicvon der Geschäftslogik abhängen.

Pritam Banerjee
quelle
1
Du bist falsch. Es hilft nicht, Speicherplatz zu sparen, da der von JVM verwendete Zeichenfolgenpool verwendet wird.
Mirimas
@ Mirimas Nein. Du liegst hier falsch, Alter. Statisch wird nur einmal initialisiert, aber eine nicht statische Variable wird jedes Mal initialisiert, wenn ein Objekt davon initialisiert wird.
Pritam Banerjee
2
Hier wird der String-Pool verwendet, da Sie zum Erstellen eines Strings kein "neues" Schlüsselwort verwenden. Wenn Sie also nicht statisch für Zeichenfolgen verwenden, wird die bereits erstellte Referenz aus dem Zeichenfolgenpool verwendet. Weitere Informationen
Mirimas
4

Sie können verwenden

 public static final String HELLO = "hello";

Wenn Sie viele Zeichenfolgenkonstanten haben, können Sie die externe Eigenschaftendatei / einfache Klasse "Konstantenhalter" verwenden


quelle
4

Oder ein anderer typischer Standard in der Branche ist die Verwendung einer Klassendatei mit dem Namen Constants.java, die alle Konstanten enthält, die im gesamten Projekt verwendet werden sollen.

V_Singh
quelle
2

einfach benutzen

final String WELCOME_MESSAGE = "Hello, welcome to the server";

Der Hauptteil dieser Anweisung ist das Schlüsselwort 'final'.

mok
quelle