实战Java虚拟机:JVM故障诊断与性能优化(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.1 词法的定义

词法规定了Java语法中每一个单词如何书写才是合乎规范的。比如,词法定义中规定了Java的关键字,如果开发人员使用Java的关键字作为变量名,显然无法通过编译。

下面简单地看一个有关标识符的定义:

这里定义了标识符由一个标识符串组成,但是不能是关键字、布尔字面量或者Null字面量。而标识符串是一个由字母开头的、由字母或数字构成的串。这里的字母或数字并非简单的ABC,而是指任意的Unicode字符。

根据这个定义便可以知道,下面的方法是不符合规范的:

因为new为Java关键字,不属于标识符,因此不能用作方法名,而下述代码则是符合规范的:

虽然上述代码使用了中文作为方法名,但是根据定义,“打”、“印”属于Unicode字符,因此是符合规范的名字,也构成了符合规范的标识符。

有关词法另一个典型的案例就是数字的表示。在JDK 1.7中,以下都属于符合规范的数字:

· 整数

○ 0、2、0372、0xDada_Cafe、1996、0x00_FF__00_FF

· 长整形

○ 01、0777L、0x100000000L、2_147_483_648L、0xC0B0L

· 单精度浮点

○ 1e1f、2.f、.3f、0f、3.14f、6.022137e+23f

· 双精度浮点

○ 1e1、2.、.3、0.0、3.14、1e-9d、1e137

就直观感觉而言,上述有些数字真是长得太奇怪了,比如0xDada_Cafe,它不更像一个英语单词吗?而事实上,这是一个符合规范的16进制整数。Java语言规范规定,以0x字符开始的数表示16进制,同时,为了可读性,也允许在数字中间增加下画线进行分割(这是JDK 1.7中引入的)。

得益于Java语言规范对于词法的定义,现在Java程序可以使用更加丰富的方法来定义数字,无论是在可读性还是在表达能力上,都非常强劲。