Konstanten (Java)
Konstanten sind Variablen die nach einmaligem Initialisieren nicht verändert werden können. Sie dienen dazu, dass man oft verwendete Variablen nicht unnötig mehrfach deklariert.
Wenn man z.b. für seine GUI eine bestimmte Schriftart verwenden will könnte man folgendes machen:
JLabel label = new JLabel("Name: ");
label.setFont(new Font("Dialog", Font.BOLD, 12));
....
label = new JLabel("Adresse: ");
label.setFont(new Font("Dialog", Font.BOLD, 12));
...
label = new JLabel("Telefon: ");
label.setFont(new Font("Dialog", Font.BOLD, 12));
Hier werden aber drei Font Objekte initialisiert obwohl sie identisch sind.
Mit der Definition einer Konstanten wird das ganze performanter und auch übersichtlicher:
private static final Font LABEL_FONT = new Font("Dialog", Font.BOLD, 12);
...
JLabel label = new JLabel("Name: ");
label.setFont(LABEL_FONT);
....
Das hat auch den Vorteil, dass wenn man die Schrift ändern will man nur die Konstante ändern muss und nicht alle Stellen im Code nach der Schrift suchen muss.
Konstante zeichnen sich v.a. durch die Deklaration static final
aus, d.h. durch das static
sind sie nicht an eine Instanz gebunden und das final
markiert, dass sie nicht mehr veränderbar sind. Des Weiteren gilt als Konvention dass man sie komplett in Großbuchstaben schreibt, um sie von den anderen nicht - konstanten Variablen unterscheiden zu können. Besteht eine Konstante aus mehreren Wörtern, so verbindet man sie mit dem Underscore Zeichen '_'.
Im Gegensatz zu normalen Variablen können Konstanten als public Variablen definiert werden, wenn sie Informationen beinhaltet, die für mehrere Klassen gültig ist (dennoch sollte der Gebrauch dieser Art von Konstanten minimiert werden).
Um eine Konstante zu definieren gibt es zwei Möglichkeiten:
Inhaltsverzeichnis
Sofort initialisieren
public class TestClass {
public static final String CONFIGURATION_FILE = "config.xml";
private static final int NUMBER_OF_LINES_TO_READ = 10;
.....
}
static "Konstruktor"
public class TestClass{
private static final String PROP_FILE = "prop.properties";
public static final String CONFIG_FILE;
public static final String PROJECT_NAME;
static {
// hier könnte man z.b. nun ein File einlesen in dem die
// Werte für die Konstanten stehen
Properties prop = new Properties();
prop.load(new FileInputStream(PROP_FILE));
CONFIG_FILE = prop.getProperty("configFile");
PROJECT_NAME = prop.getProperty("projectName");
}
}
ABER
Es kommt manchmal vor, dass man ein Interface als "Konstantenlager" missbraucht:
interface Constants {
public String CONFIG_FILE = "config.xml";
public int WHAT_EVER = 20;
}
public class setTest implements Constants{
public static void main(String[] args) {
System.out.print(CONFIG_FILE);
}
}
Das ist zwar recht angenehm, da man die Variable einfach in versch. [[Klasse|Klassen] verwenden kann. Aber es widerspricht komplett dem Sinn eines Interfaces und sollte daher nicht gemacht werden! Stattdessen sollte man enums, also Aufzählungen, verwenden.
Eine häufige Stolperstelle ist ein konstanter Array, da man dessen Elemente ändern kann!
private static final String[] TEST = {"Test", "Test2"};
public static void main(String[] args) {
System.out.println(TEST[0]); // gibt "Test" aus
TEST[0] = "HAHA";
System.out.println(TEST[0]); // gibt "HAHA" aus
}
Um dem entgegen zu gehen, niemals einen konstanten Array verwenden, sondern ihn in eine unmodifizierbare Liste umwandeln:
private static final String[] TEST = {"Test", "Test2"};
public static final List TEST_LIST = Collections.unmodifiableList(Arrays.asList(TEST));
public static void main(String[] args) {
TEST_LIST.set(0, "HAHA"); // wirft eine UnsupportedOperationException, keine Änderung möglich
}
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.
-- bygones 30.06.2004