Keywords
Unter einem Keyword vesteht man eine Zeichenfolge, die in Java nur mit ganz bestimmter Bedeutung eingesetzt werden darf.
So darf das if
ausschließlich verwendet werden um ein Konstrukt zur Bedingten Ausführung einzuleiten.
Nicht aber als bezeichner, auch nicht als Teil eines package-Namens.
Mit Java 5 kam enum
als 50tes keyword hinzu:
abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while
Java 9 brachte mit dem einzelnen Underscore _
das 51te und bislang letzte keyword hinzu.
Der Grund für die sparsame Einführung neuer keywords liegt an der unvermeidlichen Kompilier-Fehlern die beim Update entstehen, wenn das -- bis dahin erlaubte -- keyword bona fide verwendet wurde.
Da aber eine Spracherweiterung nur möglich ist, wenn neue Konstrukte eindeutig identifzierbar sind, wurde ein alternativer Weg gefunden.
Die Sequenz var
wurde in Java 11 eingeführt um Varaiblen deklarieren zu können, deren Typ der Compiler aus dem Kontext bestimmt.
So definiert der Ausdruck
var x = "fünf";
die Variable x mit dem Typ String.
var
kann aber weiterhin als Bezeichner genutzt werden. Zumindest der Compiler hat nichts gegen diese Deklaration:
class Var { static int var = 5; { var var = Var.var; } }
Als Typ-Identifier hingegen ist "var" nicht erlaubt.
Mit Java 17 wurde in der Java-Spec ein neuer Begriff geprägt: das Contextual Keyword. Die Spec listet 16 solcher Sequenzen auf:
exports opens requires uses module permits sealed var non-sealed provides to with open record transitive yield
Mit Ausnahme von non-sealed
sind die contextual keywords als Bezeichner -- etwa für Varaiblen oder Klassen -- verwendbar.
Die Sequenzen true
, false
und null
sind im übrigen keine keywords -- auch keine Kontext-Keywords --
sondern Literale, also Bezeichner für Konstanten.