一.Java中对goto关键字的处理
在Java中,我们不能使用goto关键字,而是使用循环标签,但是为了避免程序员自行使用goto,所以保留了goto作为一个关键字。类似的关键字还有const。
二.true、false、null是否是关键字
在Java中,true、false、null都不是关键字,而是字面常量(也称为直接量),其中,true和false是布尔类型的字面常量,null是引用类型的字面常量。这三个字面常量也不能作为标识符使用。
三.Java中的关键字
关键字 | 含义 |
abstract | 表明类或者成员方法具有抽象属性 |
assert | 用来进行程序调试 |
boolean | 基本数据类型之一,布尔类型 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表是其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在switch语句中,表明一个默认的分支 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
1.大多数人理解的Java标志符的定义规则:
(1).标识符由字母、数字、货币符号(¥、$)、连接符号(_)组成。
(2).标识符的首字母可以是字母、货币符号与连接符号,但是不能为数字。
(3).标识符不能与Java中的关键字相同。
(4).标识符不能与Java中预定义的字面常量名称相同(如true、false、null)。
上面的规则在大部分时候是正确的,但是要注意这里的字母不只是传统中的26个英文字母,而是Unicode字符集,Unicode字符集的取值范围是U+0000~U+10FFFF,但是不是每一个Unicode值都与一个字符相对应,这就意味着不是整个Unicode字符集都可以作为Java中的标识符。还有就是不能作为Java标识符首字母的字符集,也不仅仅是简单的0~9这10个数字。那么我们怎么判断一个Unicode是否可以作为Java标识符呢?在Character中有这样两个方法可以进行判断:
public static boolean isJavaIdentifierStart(char ch);判断对应的字符是否可以作为Java的标识符的首字符
public static boolean isJavaIdentifierPart(char ch);判断对应的字符是否可以作为Java的标识符
由于Unicode字符集的扩展,为了能够处理增补字符(U+10000~U+10FFFF),在jdk1.5中增加了两个方法,也用于此作用:
public static boolean isJavaIdentifierStart(int codePoint);判断代码点对应的字符是否可以作为Java的标识符的首字符
public static boolean isJavaIdentifierPart(int codePoint);判断代码点对应的字符是否可以作为Java的标识符
2.现在,我们重新定义一下标识符的定义规则:
(1).标识符的首字母对应的代码点必须使得Character类的isJavaIdentifierStar()方法返回值为true,后续的字符对应的代码点必须使得Character类的isJavaIdentifierPart()的返回值为true。
(2).标识符不能与Java中的关键字相同。
(3).标识符不能和Java中预定义的字面常量名称相同。
(4).标识符的长度必须在系统所支持的范围内。
五.注意符号“$”的使用
在定义Java标识符的时候,我们可以使用$,并且可以使用它作为标识符的首字母,但是我们需要注意$这个符号可以在内部类中使用,所以当我们使用$作为关键字字符时,需要考虑到这一点。
public class User$Vip { public static void main(String[] args) { } } class User{ class Vip{ void print() { System.out.println("vip"); } } }
上面这个例子就是因为类标志符中使用$,与内部类中的$冲突,所以编译的时候会报错,提示User.Vip类重复了。其原因是在编译为class文件的时候,会存在两个User$Vip.class,所以会报错。
六.标识符的最大长度
在Java语言规范中,对于Java标志符的长度是没有限制的,但是在Java虚拟机规范中,标识符是有长度限制的。在class文件中,代表标识符的常量字符串存储在CONSTANT_Utf8_info表中,这个表用了两个字节的来表示字符串的长度。所以最大表示65535.