Java基础入门变量作用域
变量作用域是指程序中变量的名字可以被引用的部分。这样说可能比较抽象,变量的作用域通俗上可以理解为一个变量在声明后,程序中哪部分可以访问声明的变量。我们都知道,在变量声明之前我们是不能使用该变量的。
我们首先给出变量可以声明的地方。在Java中,我们可以在如下位置声明变量:
- 在类体中作为类属性(变量)。在这里定义的变量被称为类级(class-level)变量
- 作为方法或构造方法的参数
- 在方法体或构造方法的方法体中
- 在语句块中,比如在while循环或for循环中定义
变量作用域被称变量的可访问性。在Java中有多种规则,我们下面一一讲解:
规则一、在语句块中定义的变量只能在块中被访问。这种变量的作用域是声明它的块内。我们给出一个例子作为讲解的依据:
public class MainClass {
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
System.out.println(x);
}
}
}
在for语句中定义的变量为x,这个变量可以被看做是for语句块中定义的变量。因此x的可访问范围只是for语句的块的内部。如果在for语句块之后如果有一个语句,则后面的语句是不能引用变量x的。
规则二、内部块中定义的变量可以访问外部块中定义的变量。这里我们给出一个例子来讲解外部块和内部块:
public class MainClass {
public static void main(String[] args) {
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 3; y++) {
System.out.println(x);
System.out.println(y);
}
}
}
}
例子中给出了两个for语句,外层的for循环语句块、内部的for语句块。根据规则二,我们能够知道声明在外部块内部的语句块可以访问外部for语句块定义的变量x。例子中的实际代码也说明这一点。大家可以编译一下,然后实际运行看看结果。
规则三、作为方法参数定义的变量可以在方法体内部访问。这里我们拿Main方法作为讲解:
class CommandLine {
public static void main(String[] args) {
if(args == null){
return;
}
for (int i = 0; i < args.length; i++)
System.out.println("args[" + i + "]: " + args[i]);
}
}
代码中我们可以看出,参数args在main方法里是都可以访问的。
规则四、类变量在类中的任何地方都可以访问。这个应该很容易理解。
根据上面给出的规则,可能会遇到这样的情况。我们定义了一个类变量名为fieldName,然后我们在方法methodA中,定义了一个方法变量fieldName,那么这时在methodA方法中访问fieldName,得到的值是什么呢?
我们在给出另一条规则,就可以解决这个问题。如下:
规则五、如果内部块中定义了和外部块中相同名称的变量,则内部块中的变量会覆盖掉外部块中的变量定义。

