Keywords

Aus MimiPedia

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.