作用域(scope)决定一个变量能在哪里被访问。理解作用域后,你会更容易看懂方法内部变量和外部变量之间的关系。
局部变量
定义在方法内部的变量称为局部变量(local variable)。它只能在方法内部访问。方法执行结束后,这些局部变量就会被销毁。方法参数也是方法内部的局部变量。
下面的 swap() 看起来交换了 a 和 b,但它交换的是自己的局部变量。可以把 main() 和 swap() 想成两个不同的房间:两个房间里都可以有叫 a 的盒子,但它们不是同一个盒子。
static void swap(int a, int b) {
int temporary = a;
a = b;
b = temporary;
System.out.println("方法内部:a = " + a + ",b = " + b);
}
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("交换前:a = " + a + ",b = " + b);
swap(a, b);
System.out.println("交换后:a = " + a + ",b = " + b);
}运行结果:
交换前:a = 1,b = 2
方法内部:a = 2,b = 1
交换后:a = 1,b = 2互动实验
局部作用域与同名变量
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
调用 swap(a, b) 时,swap() 中的 a 和 main() 中的 a 是什么关系?
static 静态变量
局部变量只在所属方法内有效。如果多个 static 方法需要读写同一份数据,可以把变量声明在所有方法之外,并在前面加上 static。
静态变量在程序运行期间只保留一份。一个静态方法修改它以后,其他静态方法再次读取时会看到更新后的值。
static int score = 0;
static void addScore(int points) {
score += points;
}
static int getScore() {
return score;
}
public static void main(String[] args) {
addScore(10);
addScore(5);
System.out.println(getScore());
}运行结果:
15静态变量适合保存多个静态方法共同维护的状态。应集中通过明确的方法修改它,避免程序中的任意位置随意赋值。
知识测验
题目
让多个静态方法共享同一份变量,需要使用哪个关键字?
动手练习
构建共享计分板
使用一个静态变量保存分数,并通过两个静态方法集中修改和读取它。
- 声明 static int score 并初始化为 0。
- 编写 addScore(int points) 方法。
- 编写 getScore() 方法并在 main() 中验证结果。