首页 > 技术文章 > Java基础 关键字 和标识符

nmdzwps 2017-02-16 17:17 原文

一.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 用在循环结构中
四.Java标识符的定义规则

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标识符的时候,我们可以使用$,并且可以使用它作为标识符的首字母,但是我们需要注意$这个符号可以在内部类中使用,所以当我们使用$作为关键字字符时,需要考虑到这一点。
[java] view plain copy
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.


关键字和标识符相关的笔试题


如下那个是Java的标识符
A.fiedldname
B.super
C.3number
D.#number
答案是A。

标识符
定义:
用户在编程时给类、变量/常量、方法(函数)、语句块等起的名字。
组成规则:
a.由数字0-9,26个英文字母的大小写,$和_组成;
b.不能以数字开头;
c.不能是关键字(总算是和关键字有一点联系了)
d.名字之中不要用空格
e.Java中严格区分大小写
常用的命名规则:
A:包
用于把同名的文件放到不同的目录下。
全部小写。如果是多级包,用.分开。
举例:itcast,cn.itcast, com.baidu
给公司做项目:域名反写作为包名。
B:类和接口(见名知意,驼峰命名)
a:一个单词时首字母大写。
举例:Student,Teacher
b:由多个单词组成,每个单词的首字母大写。
举例:HelloWorld, HaoGuiBao
C:方法和变量
a:一个单词时首字母小写。
举例:main(),age
b:如果是多个单词组成,从第二个单词开始,每个单词的首字母大写。
举例:showName(),studentAge
D:常量
a:如果是一个单词,全部大写。
举例:PI
b:如果是多个单词,全部大写,并用_隔开
举例: STUDENT_MAX_AGE

小结:
关键字是语言本身给定义的,而标识符是我们自己来命名的,这些单词都是为了让我们能够更好的理解程序,统一大家的认知,使得程序员之间、程序员与机器之间都能够良好的沟通。条条框框虽多,但是都值得遵守。
一.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 用在循环结构中
四.Java标识符的定义规则
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标识符的时候,我们可以使用$,并且可以使用它作为标识符的首字母,但是我们需要注意$这个符号可以在内部类中使用,所以当我们使用$作为关键字字符时,需要考虑到这一点。
[java] view plain copy
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.

推荐阅读