Java规范是否定义了常量的原理,还是留给了推荐角色?
如果在规范中定义,它的定义是什么?
具体而言,以下任何或所有例子都被视为常数吗?如果确实存在部分或全部,是否按照规范或任何其他官方建议进行了考虑?
public static final int ONE = 1;
public static final double TWO = 2.0d;
public static final String THREE = "three";
public static final ImmutableList<Integer> ONE_TWO_THREE = ImmutableList.of(1, 2, 3);
public static final Logger logger = LogManager.getLogManager().getLogger(ThisClass.class);
Run Code Online (Sandbox Code Playgroud)
Sot*_*lis 16
Java语言中有两种常量用法.有一些常量表达式,这些表达式在规范中定义.请参见第15.28章"常量表达式"
常量表达式是表示基本类型值的表达式或不突然完成的字符串,仅使用以下内容组成:
- 原始类型和文字类型的文字
String(§3.10.1,§3.10.2,§3.10.3,§3.10.4,§3.10.5)- 转换为基本类型并转换为String类型(第15.16节)
- 一元运算符
+,-,~,和!(但不++或--)(§15.15.3,§15.15.4,§15.15.5,§15.15.6)- 乘法运算符
*,,/和%(§15.17)- 添加剂操作符
+和-(§15.18)- 班次运营商
<<,>>和>>>(§15.19)- 关系运算符
<,<=,>,和>=(但不包括instanceof)(§15.20)- 平等算子
==和!=(§15.21)- 按位和逻辑运算符
&,^以及|(§15.22)- 条件运算符和运算符
&&以及条件运算符||(第15.23节,第15.24节)- 三元条件运算符
? :(§15.25)- 带括号的表达式(第15.8.5节),其包含的表达式是一个常量表达式.
- 引用常量变量的简单名称(第6.5.6.1节)(§4.12.4).
TypeName . Identifier引用常量变量的形式的合格名称(第6.5.6.2节)(§4.12.4).
如果你按照常量变量的链接,你会发现
空白
final是一个final变量,其声明缺少初始化程序.常量变量是使用常量表达式初始化
final的基本类型或类型的变量String(第15.28节).变量是否是常量变量可能对类初始化(第12.4.1节),二进制兼容性(第13.1节,第13.4.9节)和明确赋值(第16节(定义赋值))有影响.
所以static不是必需的.Java语言只关心变量是否final在其声明中使用常量表达式进行初始化.
还有枚举常量,它们是枚举实例.
其他用途是开发人员用来引用不会改变的东西(无论是非常final量变量还是其他东西).小心如何将这些与上面的常量结合使用.
话虽这么说,你的例子包含变量,根据上面提到的规范被认为是常量,而不是.前三个变量是final原始类型或类型的变量String,因此是常量变量:
public static final int ONE = 1;
public static final double TWO = 2.0d;
public static final String THREE = "three";
Run Code Online (Sandbox Code Playgroud)
虽然被声明final,但最后两个变量不应被视为常量变量,因为它们既不是原始类型也不是类型String:
public static final ImmutableList<Integer> ONE_TWO_THREE = ImmutableList.of(1, 2, 3);
public static final Logger logger = LogManager.getLogManager().getLogger(ThisClass.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |