Keywords
Was ist ein Keyword?
Unter einem Keyword vesteht man in einer Programmiersprache eine Zeichenfolge, die 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.
Java Keywords
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
In Java 9 kam mit dem einzelnen Underscore _
das 51te und bislang letzte Keyword hinzu.
Der Grund für die sparsame Einführung neuer Keywords liegt an den unvermeidlichen Kompilier-Fehlern die beim Update entstehen, wenn das -- bis dahin erlaubte -- Keyword bona fide verwendet wurde. Das ist durchaus problematisch, da die gestörte Abwärts-Komaptibilität zu erhöhtem Aufwand und zu Verzögerungen beim Update führt.
Da aber eine strukturelle Spracherweiterung nur möglich ist, wenn neue Konstrukte eindeutig identifzierbar sind, wurde ein alternativer Weg gefunden der die Abwärts-Kompatibilität nicht gefährdet.
Contextual Keywords
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 etwa der Ausdruck
var x = "fünf";
eine Variable mit dem Bezeichner x
und dem Typ String
.
Im Gegensazu zu den Keywords kann var
aber weiterhin als Bezeichner genutzt werden. Zumindest der Compiler hat nichts gegen diese Deklaration:
class Var { static int var = 5; { var var = Var.var; } }
Einzige Einschränkung ist, daß var
nicht als Typ-Identifier erlaubt ist, was aber nicht geschieht wenn sich der Coder an die "Sun"-Code-Convention hält.
Mit Java 9 wurden die Sequenzen
open module requires transitive exports opens to uses provides with
im Rahmen von Project "Jigsaw" eingeführt, das neue Java-Modul-Konzept. Die Spec bezeichnet sie als Restricted Keywords.
Erst mit Java 17 wurde in der Java-Spec dafür der Begriff Contextual Keyword geprägt. Java 17 führten die folgenden sequenzen ein:
permits sealed non-sealed record yield
Mit Ausnahme von non-sealed
sind alle Contextual Keywords als Bezeichner -- etwa für Variablen -- verwendbar.
Ungenutzte Keywords
In der Liste der echten Keywords fallen einige auf, die in der normalen Programmierung nicht auftauchen:
const und goto wurden in der ersten Java-Spezifikation definiert, aber niemals mit einer Semantik versehen. Sie können nicht verwendet werden und würden auch nichts tun wenn man es könnte.
_ (der Underscore) wurde präventiv eingeführt, hat auch in Java 21 noch keine Bedeutung erhalten. Er wird vermutlich im Zusammenhang mit dem type pattern matching einmal Bedeutung erhalten.
Nicht-Keywords
Obwohl man das vermuten könnte, sind die Sequenzen true
, false
und null
keine Keywords -- auch keine Kontext-Keywords.
Tatsächlich handelt sich bei allen drei um Literale, also Sequenzen die Konstanten definieren.
Dadurch verhalten sich die drei ähnlich wie Keywords, sie können nicht als Bezeichner verwendet werden, auch nicht als Teil eines Package-Bezeichners.