一、概述
- Java 中有 50 个关键字,由 ASCII 字母组成,不可用作标识符。
- 其中
const
和goto
为保留字,虽未实际使用但被预留。 - 有 3 个特殊值:
true
、false
(布尔字面量)、null
(空字面量),它们看似关键字,实则为特殊值。
二、基本数据类型相关关键字(8 个)
用于定义不同存储范围和特性的基本数据类型。
-
byte:单字节类型
- 1 个字节(8 位),数据范围:
[-128, 127]
- 注意:
byte
与byte
做算术运算,结果会升级为int
。
- 1 个字节(8 位),数据范围:
-
short:短整型
- 2 个字节(16 位),数据范围:
[-32768, 32767]
- 注意:
short
与short
做算术运算,结果会升级为int
。
- 2 个字节(16 位),数据范围:
-
int:整型
- 4 个字节(32 位),数据范围:
[-2^31, 2^31 - 1]
。
- 4 个字节(32 位),数据范围:
-
long:长整型
- 8 个字节(64 位),数据范围:
[-2^63, 2^63 - 1]
- 注意:
long
类型的数字后面需要加L
或小写l
。
- 8 个字节(64 位),数据范围:
-
char:单字符类型
- 2 个字节(16 位),无符号整数范围:
[0, 65535]
,使用 Unicode 字符集 - 标准 ASCII 字符集范围
[0, 127]
,其中数字字符['0','9']
的编码值是[48,57]
,大写字母['A','Z']
编码值[65,90]
,小写字母['a','z']
编码值[97,122]
- 字符常量表示方式:直接字符(如
'a'
、'尚'
)、转义字符(如b
退格、t
水平制表、n
换行等)、Unicode 编码十六进制形式(如'u5c1a'
表示'尚'
) - 注意:
char
与char
做算术运算,结果为int
类型。
- 2 个字节(16 位),无符号整数范围:
-
float:单精度浮点型
- 4 个字节,最大精度范围:科学记数法表示数字后的小数点后 6~7 位
- 注意:
float
类型的数字后面需要加F
或f
。
-
double:双精度浮点型
- 8 个字节,最大精度范围:科学记数法表示数字后的小数点后 15~16 位。
-
boolean:布尔类型
- 只能有两个值:
true
和false
。
- 只能有两个值:
三、声明引用数据类型相关(3 个)
用于定义类、接口、枚举等引用数据类型。
-
class:声明类
-
语法格式:
【修饰符】 class 类名{ } 【修饰符】 class 类名 【extends 父类】 【implements 父接口们】{ }
-
类中可包含 5 个成分:成员变量(属性)、成员方法、构造器、代码块、成员内部类。
-
-
interface:声明接口
-
语法格式:
【修饰符】 interface 接口名{ ... } 【修饰符】 interface 接口名 【extends 父接口们】{ }
-
特点:
- JDK1.8 之前,只能有全局静态常量(
public static final
)和公共抽象方法(public abstract
);JDK1.8 之后,可包含公共静态方法(public static
)和公共默认方法(public default
) - 无构造器、代码块,但可声明成员内部类、成员内部接口
- 不能直接实例化,但接口类型的变量可与实现类的对象构成多态引用
- 可继承多个父接口,Java 类可同时实现多个父接口(非抽象实现类必须实现所有抽象方法)。
- JDK1.8 之前,只能有全局静态常量(
-
-
enum:声明枚举
-
语法格式:
【修饰符】 enum 枚举类型名{ } 【修饰符】 enum 枚举类型名 【implements 父接口们】{ ... }
-
特点:
- 枚举类型有已知的几个常量对象,必须在枚举类型的首行声明
- 不能显式声明父类,默认继承
java.lang.Enum
类型。
-
四、特殊空类型(1 个)
- void:无返回值类型
-
语法格式:
// 抽象方法 【修饰符】 void 方法名(【形参列表】)【throws 异常列表】; // 非抽象方法 【修饰符】 void 方法名(【形参列表】)【throws 异常列表】{ }
-
注意:返回值类型是
void
的方法中,可使用return;
提前结束方法运行。
-
五、流程控制语句相关(10 个)
用于控制程序执行流程。
-
if/else:条件判断分支结构
-
语法格式:
// 单分支 if(条件表达式){ 语句块; } // 双分支 if(条件表达式){ 语句块1; }else{ 语句块2; } // 多分支 if(条件表达式1){ 语句块1; }else if(条件表达式2){ 语句块2; }else{ 语句块n+1; }
-
-
switch/case:选择结构
-
语法格式:
switch(表达式){ case 常量值1: 语句块1; 【break;】 case 常量值2: 语句块2; 【break;】 【default: 语句块n+1; 【break;】】 }
-
执行过程:匹配
case
常量值进入入口,顺序执行至break
或结构结束 -
注意:
- 表达式类型:
byte
、short
、int
、char
、String
(JDK1.7+)、枚举(JDK1.5+) case
后必须是常量值,且不可重复。
- 表达式类型:
-
-
for:循环
-
普通 for 循环:
for(【初始化表达式】; 【循环条件】; 【迭代表达式】){ 循环体语句块; }
执行过程:初始化→判断循环条件→成立则执行循环体→迭代表达式→重复判断
-
增强 for 循环(foreach):
for(元素数据类型 元素名 : 数组或集合等容器名){ 循环体语句块; }
用于遍历实现
java.lang.Iterable
接口的容器(如数组、集合),调用迭代器的hasNext()
和next()
方法 -
注意:
for(;;)
为死循环(无break
时)。
-
-
while:循环
-
语法格式:
while(循环条件){ 循环体语句块; }
-
执行过程:先判断循环条件,成立则执行循环体,重复判断。
-
-
do:与
while
结合构成do...while
循环-
语法格式:
do{ 循环体语句块; }while(循环条件);
-
特点:至少执行一次循环体,
while
后分号不可省略。
-
-
break:结束结构
- 用法:结束当前
switch
结构;结束当前(层)循环,结合标签可结束指定循环。
- 用法:结束当前
-
continue:跳过本次循环
- 用法:仅用于循环,提前结束本次循环,跳过剩余循环体语句,结合标签可作用于指定循环。
-
return:结束方法
- 形式:
return;
:用于返回值为void
的方法,提前结束return 返回值;
:用于返回值非void
的方法,提前结束并返回结果(必选)。
- 形式:
六、default(1 个)
- default:默认的
- 用法:
switch...case
结构中,表示默认分支- JDK1.8 之后接口中用于声明默认方法
- 注解中用于声明某个配置参数的默认值。
- 用法:
七、关系相关(5 个)
-
extends:继承关系
- 用于类继承父类、接口继承父接口
- 语法:
【修饰符】 class 子类 extends 父类{ }
、【修饰符】 interface 子接口 extends 父接口们{ }
。
-
implements:实现关系
- 用于类实现接口
- 语法:
【修饰符】 class 子类 【extends 父类】 implements 接口们{ }
。
-
instanceof:所属关系判断
- 语法:
if(对象 instanceof 类型名){ }
,判断对象是否属于指定类型,常用于向下转型前避免ClassCastException
异常。
- 语法:
-
this:引用当前对象
- 用法:
this.属性
/this.成员变量
:区分局部变量与成员变量this.成员方法()
:调用当前对象的其他成员方法this()
/this(实参列表)
:在构造器首行调用本类其他构造器。
- 用法:
-
super:引用父类
- 用法:
super.属性
:访问父类被隐藏的属性super.方法
:调用父类被重写的方法super()
/super(实参列表)
:在子类构造器首行调用父类构造器(super()
可省略,super(实参列表)
不可省略)。
- 用法:
八、创建对象(1 个)
- new:创建
- 用于创建数组对象、类的对象,创建的对象存储在堆中。
九、包相关(2 个)
-
package:声明包
- 作用:避免类的重名、控制某些类 / 成员的可见范围、分包组织管理类
- 语法格式:
package 包名;
(必须在.java 源文件首行) - 命名规范:所有单词小写,用
.
分割,习惯用公司域名倒置 + 模块名。
-
import:导包
-
用于使用其他包的类,语法:
import 包.类名; import 包.*; import static 包.类名.静态成员名; import static 包.类名.*;
-
注意:使用两个不同包的同名类时,一个用全名称,一个用导包。
-
十、修饰符
1. 权限修饰符(3 个)
修饰符 | 本类(任意位置) | 本包其他类 | 其他包的子类 | 其他包非子类 | 可修饰成分 |
---|---|---|---|---|---|
private | √ | × | × | × | 属性、方法、构造器、成员内部类 |
缺省 | √ | √ | × | × | 属性、方法、构造器、成员内部类、外部类 |
protected | √ | √ | √ | × | 属性、方法、构造器、成员内部类 |
public | √ | √ | √ | √ | 属性、方法、构造器、成员内部类、外部类 |
2. 其他修饰符(8 个)
-
static:静态的
- 可修饰:成员变量(类变量,所有对象共享,存储在方法区)、成员方法(类方法,不可重写,用类名调用)、代码块(静态代码块,类初始化时执行一次)、成员内部类(静态内部类,可包含静态成员)
- 注意:静态方法中不能出现
this
、super
,不能直接使用非静态成分。
-
native:原生的
- 仅修饰方法,表示方法体非 Java 语言实现,可像普通 Java 方法一样调用和重写。
-
final:最终的
- 可修饰:
- 类(包括外部类、内部类):不能被继承
- 方法:不能被子类重写,可继承
- 变量(成员变量和局部变量):值不可修改(常量),建议常量名大写,单词间用
_
分割(如XXX_YYY_ZZZ
)。
- 可修饰:
-
abstract:抽象的
- 可修饰类、方法:
- 抽象方法:无方法体,包含抽象方法的类必须是抽象类
- 抽象类:不能直接实例化,子类需实现所有抽象方法(否则子类也为抽象类),可包含类的 5 大成员。
- 可修饰类、方法:
-
synchronized:同步的
- 可修饰方法(同步方法)和同步代码块:
- 同步方法的锁对象:静态方法为
当前类.class
,非静态方法为this
- 同步代码块:
synchronized(锁对象){ }
。
- 同步方法的锁对象:静态方法为
- 可修饰方法(同步方法)和同步代码块:
-
volatile:易变的
- 修饰成员变量,表示变量值易变,多线程中每次读取需从主存获取最新值(不缓存)。
-
strictfp:严格遵循 FP 模式
- 修饰类、接口、方法,确保浮点运算遵循 IEEE-754 规范,不同硬件平台结果一致。
-
transient:瞬时的
- 修饰成员变量,实现
java.io.Serializable
接口的类中,该变量不参与序列化。
- 修饰成员变量,实现
十一、异常处理相关(5 个)
-
try:尝试执行
- 尝试执行代码,若发生异常则抛出异常对象,由
catch
捕获。
- 尝试执行代码,若发生异常则抛出异常对象,由
-
catch:捕获异常
- 尝试捕获
try
中抛出的异常对象,类型匹配则处理,否则结束当前方法。
- 尝试捕获
-
finally:最终块
- 无论
try
中是否抛出异常、catch
是否捕获、是否有return
,都会执行。
- 无论
-
throw:抛出
- 手动抛出异常,语法:
throw 异常对象;
,未被捕获则结束当前方法并将异常带回调用处,用户自定义异常需手动抛出。
- 手动抛出异常,语法:
-
throws:声明抛出异常
- 在方法签名中声明抛出的异常类型,语法:
【修饰符】 返回值类型 方法名(【形参列表】) throws 异常类型列表{ }
,表示异常由调用者处理。
- 在方法签名中声明抛出的异常类型,语法:
十二、assert(1 个)
- assert:断言
- 语法:
assert 布尔表达式;
或assert 布尔表达式 : "错误信息";
- 若表达式为
false
,抛出java.lang.AssertionError
,需通过 JVM 参数-ea
开启断言功能。
- 语法:
十三、保留字(2 个)
- const:在 C 语言等中用于声明常量,Java 中未使用但保留。
- goto:在 C 语言等中用于跳转到指定位置,Java 中未使用但保留。
十四、特殊值(3 个)
- true:布尔值 “真”
- false:布尔值 “假”
- null:空值,调用属性或方法会报空指针异常
- 三者看似关键字,实则为特殊值。