Java变量声明必须指定类型,是静态类型语言;局部变量需显式初始化,类成员有默认值;final修饰变量不可重新赋值;命名应体现作用域和语义,布尔变量用is/has/can开头。

Java变量声明必须指定类型
Java是静态类型语言,声明变量时类型不能省略,不像JavaScript可用let或Python直接赋值。漏写类型会直接编译失败。
-
int count;✅ 合法声明(未初始化) -
count = 5;❌ 编译错误:找不到符号 —— 必须先声明类型才能使用 -
var name = "Alice";✅ Java 10+ 支持var,但仅限局部变量且需立即初始化
初始化时机决定默认值是否生效
类成员变量(字段)有默认值,局部变量没有——这是最常踩的空指针或编译报错根源。
- 类中
String text;→ 默认为null,不会报错 - 方法内
String text;→ 编译报错:variable text might not have been initialized - 数组声明后不初始化,元素仍按类型取默认值:
int[] arr = new int[3];→arr[0]是0,不是null
final变量一旦赋值就不能再改
final修饰的变量不是“常量字面量”,而是“不可重新赋值的引用/值”,这点在对象和基本类型上表现不同。
-
final int x = 10;→ 再赋值x = 20;编译报错 -
final List→list = new ArrayList(); list.add("a");✅ 合法;但list = new ArrayList();❌ 不合法 -
static final常配合UPPER_SNAKE_CASE命名,如public static final String API_URL = "https://api.example.com";
变量名要体现作用域和意图,避免缩写歧义
Java虽不限制命名长度,但IDE提示、团队协作和重构成本直接受命名质量影响。
立即学习“Java免费学习笔记(深入)”;
- 方法内用
userList比ul清晰;循环索引用i可接受,但嵌套时推荐rowIndex/colIndex - 布尔变量优先用
is/has/can开头:isActive、hasPermission、canRetry - 避免
name这种泛化名:在User类里应为firstName或fullName,取决于实际语义
public class User {
private final String userId; // final + 不可变语义
private String firstName; // 非final,允许后续修改
private boolean isActive; // 布尔命名带is前缀
public User(String userId) {
this.userId = userId; // 构造器中完成final字段初始化
this.isActive = true; // 显式初始化,不依赖默认值
}
}
局部变量的生命周期短,但命名随意性反而最容易引发理解偏差;而final字段如果漏掉构造器赋值,编译器会立刻报错——这其实是Java帮你守住边界。









