Java教程
Java标识符与关键字
Java变量
Java数据类型
Java运算符
Java控制语句
Java方法
Java面向对象
Java对象的创建和使用
Java封装
Java中static和this
Java继承
Java方法覆盖和多态
Java super
Java基础练习题

Java变量的作用域

所谓变量的作用域就是变量的有效范围。通过后面内容的学习大家会更加明白,实际上局部变量、实例变量、静态变量它们存储在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方法中一定访问离自己最近的变量,也就是就近取材,这就是就近原则,几乎所有的编程语言都是这样的。