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%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 nichtinstanceof
) (§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 einefinal
Variable deren Deklaration fehlt Initialisierer.Eine konstante Variable ist eine
final
Variable vom primitiven Typ oder TypString
, 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 :
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: