软件即是程序+数据,程序是以某种规则告知计算机如何操作数据。因此对于程序员来说,最应该时刻铭记的是:你操作在什么数据。
so...变量的作用域的重要性就显得尤为重要!
在JAVA中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。
类 | 对象实例 | 方法 | 代码块 |
---|---|---|---|
类级变量又称全局级变量或静态变量,需要使用static关键字修饰。 类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化 |
对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问。访问的时候需要使用实例对象才能进行访问(如object.memberVariables或this.memberVariables)。 成员变量是定义在方法之外,类之内的。成员变量随着对象的创建而存在,随着对象的消失而消失。 |
方法级变量就是在方法内部定义的变量,就是局部变量。局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量的作用域从它被声明的点开始,到方法体结束。一旦方法出栈,局部变量就访问不到了 | 块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码 |
上代码样例:
public class Scope {
/**
* 类级变量
*/
public static String str = "我是类级变量";
/**
* 对象实例级变量
*/
final int num = 10;
public void display() {
// 方法级变量
int num = 20;
// 方法级变量
String str = "我是方法级变量";
System.out.println("类级变量: " + str);
Runnable runnable = new Runnable() {
/**
* 类级变量
*/
final int num = 30;
@Override
public void run() {
// 方法级变量
int num = 40;
// this关键字代表当前对象即变量 runnable ,访问该对象的对象实例级变量num(value=30)
System.out.println("num = " + this.num);
}
};
runnable.run();
}
public static void main(String[] args) {
Scope scope = new Scope();
scope.display();
System.out.println("类级变量: " + Scope.str);
System.out.println("对象实例级变量: " + scope.num);
if (true) {
// 块级变量
String str = "块级变量";
System.out.println(str);
}
}
}