所谓变量的作用域就是变量的有效范围。通过后面内容的学习大家会更加明白,实际上局部变量、实例变量、静态变量它们存储在Java虚拟机的不同内存区域上,所以变量是有作用域的。
关于变量的有效范围,在这里我给大家总结了一个口诀:出了大括号就不认识了。虽然这句话属于大白话,但很实用。我们来测试一下:
public class VarTest05 {
//后面会学习为什么这里的变量定义为静态变量
static int i = 1000;
public static void main(String[] args) {
System.out.println("k = " + k);
int k = 100;
System.out.println("k = " + k);
int i = 2000;
System.out.println("i = " + i);
}
//后面会学习方法怎么定义
public static void m1(){
System.out.println("k = " + k);
}
public static void m2(){
System.out.println("i = " + i);
}
}
编译报错了:
图3-6:变量的作用域
通过以上的测试我们发现:
● 方法体当中的代码是有执行顺序的,遵循自上而下的顺序依次逐行执行,变量在没有声明的时候是不能访问的,需要先声明,接下来才能访问。
● 另外在main方法中声明的变量k有效范围是main方法,只能在main方法中使用,出了大括号就不认识了,在m1方法中是无法访问的。
● 在类体当中声明的变量i作用域是整个类体,所以在m2方法中是可以使用的。
修改以上代码并运行:
public class VarTest05 {
//后面会学习为什么这里的变量这个时候定义为静态变量
static int i = 1000;
public static void main(String[] args) {
//System.out.println("k = " + k);
int k = 100;
System.out.println("k = " + k);
int i = 2000;
System.out.println("i = " + i);
}
//后面会学习方法怎么定义
public static void m1(){
//System.out.println("k = " + k);
}
public static void m2(){
System.out.println("i = " + i);
}
}
运行结果如下图所示:
图3-7:变量作用域
通过以上程序的运行结果得知,java是遵循就近原则的,在类体当中有i变量,在main方法中声明了i变量,那么在main方法中一定访问离自己最近的变量,也就是就近取材,这就是就近原则,几乎所有的编程语言都是这样的。