1. 介绍
在Java 9中,下滑线字符'_'被添加为合法的标识符。在此之前,下划线实际上是Java语言中的保留字符,用于一些特定用途,例如将多个单词连接起来形成常量或类名。下划线符号被引入到Java 9中是为了改善Java编程体验。
2. 用途
2.1 作为标识符的一部分
Java 9之前,下划线作为保留字符,不能用作标识符的一部分。这在一些情况下会带来麻烦。例如,在测试程序中,通常使用一些有意义的名称来命名测试方法。在JUnit 5之前的版本中,使用@Test
注释时,方法名称中不允许有下划线符号,因为它被解释为测试方法名称和测试方法参数之间的分隔符。这是因为在Java解析标识符时,下划线被视为一个标记,表示下一个单词的开始。在Java 9中,下划线可以作为标识符的一部分,因此可以在测试方法名中使用下划线符号了。
@Test
public void test_addition() {
//测试代码
}
2.2 作为数字字面值
在Java中,数字字面值的格式被限制为仅包含数字和小数点('.')字符。在Java 7及之前的版本中,使用下划线分隔数字可读性更加友好。从Java 7开始,下划线也可用于数字字面值中。Java 9支持使用下划线分隔数字,并且它被视为数字字面值中的有效字符。
int million = 1_000_000;
double pi = 3.14_15_92_65;
以上代码代表1百万和圆周率,但实际上它们与没有下划线的相同。
2.3 使用下划线代替未使用变量名
在Java开发人员的日常工作中,经常会出现声明一个变量但从未使用的情况。在Java 9之前,这通常是通过将变量名称命名为“unused”或注释代码来处理的,这会使代码看起来很笨拙。使用下划线作为未使用变量的名称可以更明确地表达意思。
String unused_ = "unused string";
2.4 作为导入静态变量的下划线通配符
在Java 9之前,在导入静态变量时只能使用星号通配符。在以下示例中,使用导入语句导入Math类中的静态变量的星号作为通配符。
import static java.lang.Math.*;
这将导入Math类中的所有静态变量,例如PI和E等常数。但是,可能只需要导入其中的一部分。在Java 9中,决定将下划线添加为第二种静态导入通配符,以下代码只导入Math类的常量PI
import static java.lang.Math.PI;
3. 限制
下划线在Java 9中被引入作为标识符的一部分,并且在其他用途中也能工作。但是,在Java中使用下划线仍然受到限制:
3.1 不能用作变量名的首字符和尾字符
尽管在Java 9中下划线可以用作标识符的一部分,但是它不能用作标识符的首字符或尾字符,仍然必须遵循Java中标识符的命名规则,而下划线代表特殊的含义。
int _variable = 10;//合法
int variable_ = 20;//合法
int _variable_ = 30;//非法,下划线不能作为首字符和尾字符
3.2 不能在数字字面值开头和结尾
尽管下划线在数字字面值中充当分隔符,但不能在数字字面值的开头或结尾使用下划线。
double pi_ = _3.14;//非法,不能在数字字面值的开头使用下划线
double _pi = 3.14_;//非法,不能在数字字面值的结尾使用下划线
3.3 不能与关键字或已定义标识符相同
下划线不能与Java中的关键字或在程序中已经定义的标识符相同。
int _for = 10;//非法,for是Java中的关键字
int value_ = 20;//合法
int value = 30;
double _value = 40;//非法,_value已经在程序中定义
4. 总结
在Java 9中,下划线字符不再是保留字符,可以用作标识符的一部分,并且在其他用途中也能工作。Java 9引入了下划线符号以改善Java编程体验,提高程序员的生产力和代码的可读性。它可以用作数字字面值的分隔符,导入静态变量的通配符,未使用的变量名以及在测试方法名称中使用下划线。