hi,大家好,我是终南有客,一个半路出家的程序员……
想要获取更多信息,请关注(终南有客)公众号,了解最新消息
一.关键字(共50多个)
关键字的定义:某种语言赋予了特殊含义的单词,例如:extends、class
保留字的含义:保留字:还没有赋予特殊含义的单词,但是准备日后要用到的单词
关键字分类:
1.访问控制
private protected public
2.类,方法和变量修饰符
abstract class extends final implements interface native new
static strictfp synchronized transient volatile
3.程序控制
break continue return do while if else for instanceof switch
case default
4.异常处理
try cathc throw throws
5.包相关
import package
6.基本类型
boolean byte char double float int long short null true false
7.变量引用
super this void
8.保留字
goto const
关键字具体含义:
- 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标志符的定义规则:
- 标识符由字母、数字、货币符号(¥、$)、连接符号(_)组成。
- 标识符的首字母可以是字母、货币符号与连接符号,但是不能为数字。
- 标识符不能与Java中的关键字相同。
- 标识符不能与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.重新定义一下标识符的定义规则:
- 标识符的首字母对应的代码点必须使得Character类的isJavaIdentifierStar()方法返回值为true,后续的字符对应的代码点必须使得Character类的isJavaIdentifierPart()的返回值为true。
- 标识符不能与Java中的关键字相同。
- 标识符不能和Java中预定义的字面常量名称相同。
- 标识符的长度必须在系统所支持的范围内。
3.注意符号“$”的使用
在定义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,所以会报错。
4.标识符的最大长度
在Java语言规范中,对于Java标志符的长度是没有限制的,但是在Java虚拟机规范中,标识符是有长度限制的。在class文件中,代表标识符的常量字符串存储在CONSTANT_Utf8_info表中,这个表用了两个字节的来表示字符串的长度。所以最大表示65535.
想要了解更多信息,请关注(终南有客)公众号