Java 核心语法要素详解
关键字与保留字
在 Java 中,某些词汇具有特殊含义,不能用于命名变量、方法或类。这些词汇分为两类:关键字和保留字。
关键字是 Java 语言中已被赋予特定功能的标识符,例如定义类、控制流程或声明数据类型。目前共有 51 个关键字,常见的包括:
public,private,protected—— 访问控制修饰符class,interface,enum—— 类型定义if,else,for,while—— 流程控制int,double,boolean—— 基本数据类型static,final,void—— 特殊行为修饰
保留字目前未被使用,但为未来版本预留,或者因在其他语言中有意义而避免冲突。Java 的保留字仅有两个:goto 和 const,尽管它们不具实际功能,仍不可作为标识符使用。
标识符命名规则
标识符是程序员为类、方法、变量等元素起的名字。其组成可包含:
- 大小写字母(a-z, A-Z)
- 数字(0-9)
- 下划线(_)和美元符号($)
注意:不能以数字开头,且严格区分大小写,也不能使用关键字作为名称。
推荐遵循以下命名规范以提升代码可读性:
- 类名/接口名:采用大驼峰命名法,如
StudentManager - 方法名/变量名:小驼峰命名法,如
getUserName - 常量名:全大写并用下划线分隔,如
MAX_CONNECTIONS - 包名:全小写,多级时用点连接,通常反写域名,如
com.example.project
变量分类与作用域
Java 中所有变量必须先声明后使用,基本语法如下:
数据类型 变量名 [= 初始值] [, 变量名 [= 初始值]];
根据声明位置和生命周期,变量可分为四类:
1. 局部变量
定义在方法、构造函数或代码块内部,仅在该作用域内有效。必须显式初始化才能使用,否则编译失败。
public void calculate() {
int result; // 声明
result = 100; // 初始化
System.out.println(result);
}
2. 实例变量(成员变量)
位于类中但不在任何方法内,每个对象拥有独立副本。即使未初始化,也会获得默认值(数值为0,布尔为false,引用为null)。
public class Person {
private String name; // 成员变量
public int age;
public void setName(String name) {
this.name = name; // 使用 this 区分参数与成员
}
}
3. 静态变量(类变量)
使用 static 修饰,属于类本身而非实例,所有对象共享同一份数据。在类加载时初始化,常用于计数器或全局配置。
public class Counter {
private static int totalCount = 0;
public Counter() {
totalCount++;
}
public static int getCount() {
return totalCount;
}
}
4. 参数变量
出现在方法签名中,用于接收调用时传入的数据。其作用域限于对应方法体内。
public void displayInfo(String title, int value) {
System.out.println(title + ": " + value);
}
数据类型体系
Java 数据类型分为两大类:基本类型和引用类型。
基本数据类型(8种)
| 类型 | 说明 | 默认值 | 占用位数 |
|---|---|---|---|
| byte | 整数型 | 0 | 8 |
| short | 整数型 | 0 | 16 |
| int | 整数型 | 0 | 32 |
| long | 整数型 | 0L | 64 |
| float | 浮点型 | 0.0f | 32 |
| double | 浮点型 | 0.0d | 64 |
| char | 字符型 | '\u0000' | 16 |
| boolean | 布尔型 | false | — |
引用类型
指向堆内存中的对象,主要包括:
- 类实例(如 new String("Hello"))
- 数组
- 接口实现
JVM 支持四种引用强度:
- 强引用:只要强引用存在,垃圾回收器不会回收对象。
- 软引用(SoftReference):内存不足时才回收,适合缓存场景。
- 弱引用(WeakReference):每次 GC 都会回收,适用于临时映射。
- 虚引用(PhantomReference):最弱级别,仅用于跟踪对象回收状态。
类型转换机制
Java 支持两种类型转换方式:
隐式转换(自动提升)
从小范围类型向大范围类型转换,由 JVM 自动完成。
int a = 100;
long b = a; // int → long,安全
转换顺序:
byte → short → int → long → float → double
显式转换(强制转型)
从大范围到小范围需手动添加类型括号,可能造成精度丢失。
double pi = 3.14159;
int n = (int) pi; // 结果为 3
运算符体系
算术运算符
支持加减乘除、取模及自增/自减操作。
int x = 5;
int y = ++x; // 先加后赋值 → x=6, y=6
int z = x++; // 先赋后加 → z=6, x=7
关系运算符
返回 boolean 值,用于比较大小或相等性。
System.out.println(10 > 5); // true
System.out.println(5 != 5); // false
逻辑运算符
支持短路特性,提高性能。
boolean flag = false && someMethod(); // someMethod 不会被执行
位运算符
对二进制位进行操作,常用于底层优化。
int m = 60; // 00111100
int n = 13; // 00001101
System.out.println(m & n); // 按位与 → 12 (00001100)
赋值与复合赋值
简化重复操作。
int sum = 10;
sum += 5; // 等价于 sum = sum + 5;
三元运算符
简洁的条件判断结构。
String status = (score >= 60) ? "及格" : "不及格";
instanceof 运算符
判断对象是否属于某类型,支持继承链检查。
Object obj = new String("test");
if (obj instanceof String) {
System.out.println("这是一个字符串");
}
运算符优先级
表达式求值遵循优先级规则,高优先级先执行。常见顺序(由高到低):
- 括号
() - 一元运算符
++,--,! - 算术运算符
*,/,%高于+,- - 移位
<<,>> - 比较
<,== - 按位与、异或、或
- 逻辑与
&&、逻辑或|| - 三元
?: - 赋值
=,+=等
建议复杂表达式使用括号明确优先级,增强可读性。