Gibt es eine formale Definition von Konstanten?

9

Definiert die Java-Spezifikation das Prinzip von Konstanten oder ist es einer Empfehlungsrolle überlassen?

Wenn es in den Spezifikationen definiert ist, wie lautet die Definition?

Konkret: Werden einige oder alle der folgenden Beispiele als Konstanten betrachtet? Wenn einige oder alle tatsächlich sind, werden sie als der Spezifikation oder einer anderen offiziellen Empfehlung entsprechend betrachtet?

%Vor%     
Olivier Grégoire 04.04.2017, 12:54
quelle

1 Antwort

16

Es gibt zwei Verwendungen von Konstante in der Java-Sprache. Es gibt konstante Ausdrücke und diese sind in der Spezifikation definiert. Siehe Kapitel 15.28 Konstante Ausdrücke

  

Ein konstanter Ausdruck ist ein Ausdruck, der einen Wert des Grundelements bezeichnet   type oder ein String, der nicht abrupt beendet wird und mit komponiert wird   nur das Folgende:

     
  • Literale des primitiven Typs und Literale des Typs String (§3.10.1, §3.10.2, §3.10.3, §3.10.4, §3.10.5)
  •   
  • Wirkt auf primitive Typen und Umwandlungen, um String (§15.16)
  • zu schreiben   
  • Die unären Operatoren + , - , ~ und ! (aber nicht ++ oder -- ) (§15.15.3, §15.15.4, §15.15.5, § 15.15.6)
  •   
  • Die multiplikativen Operatoren * , / und % (§15.17)
  •   
  • Die additiven Operatoren + und - (§15.18)
  •   
  • Die Schichtoperatoren << , >> und >>> (§15.19)
  •   
  • Die relationalen Operatoren < , <= , > und >= (aber nicht instanceof ) (§15.20)
  •   
  • Die Gleichheitsoperatoren == und != (§15.21)
  •   
  • Die bitweisen und logischen Operatoren & , ^ und | (§15.22)
  •   
  • Der Bedingungs- und Operator && und der Bedingungs- oder Operator || (§15.23, §15.24)
  •   
  • Der ternäre bedingte Operator ? : (§15.25)
  •   
  • Parenthesized-Ausdrücke (§15.8.5), deren enthaltener Ausdruck ein konstanter Ausdruck ist.
  •   
  • Einfache Namen (§6.5.6.1), die sich auf konstante Variablen beziehen (§4.12.4).
  •   
  • Qualifizierte Namen (§6.5.6.2) der Form TypeName . Identifier , die sich auf konstante Variablen beziehen (§4.12.4).
  •   

Wenn Sie dem Link für folgen Konstante Variablen finden Sie

  

Eine leere final ist eine final Variable deren Deklaration fehlt   Initialisierer.

     

Eine konstante Variable ist eine final Variable vom primitiven Typ oder Typ    String , das mit einem konstanten Ausdruck initialisiert wird (§15.28).   Ob eine Variable eine konstante Variable ist oder nicht, kann Auswirkungen haben   in Bezug auf die Klasseninitialisierung (§12.4.1), Binärkompatibilität   (§13.1, §13.4.9), und bestimmte Zuordnung (§16 (Definite Assignment)).

So static ist nicht erforderlich. Die Java-Sprache kümmert sich nur darum, dass die Variable final ist und bei ihrer Deklaration mit einem konstanten Ausdruck initialisiert wird.

Es gibt auch Enum-Konstanten , die die enum-Instanzen sind.

Andere Verwendungen sind Entwicklerverwendungen, die sich auf etwas beziehen, das sich nicht ändert (unabhängig davon, ob es sich um eine nicht konstante final -Variable oder etwas anderes handelt). Beachten Sie, wie Sie diese in Verbindung mit den Konstanten oben verwenden.

Davon abgesehen enthalten Ihre Beispiele Variablen, die gemäß der oben genannten Spezifikation als Konstanten gelten, und solche, die nicht als solche gelten. Die ersten drei Variablen sind final und vom primitiven Typ oder vom Typ String und sind somit konstante Variablen :

%Vor%

Obwohl die letzten beiden Variablen als final deklariert sind, sind nicht als konstante Variablen zu betrachten, da sie weder vom Primitivtyp noch vom Typ String sind:

%Vor%     
Sotirios Delimanolis 07.04.2017, 12:19
quelle

Tags und Links