在java语言中,依照作用范围可划分为局部变量与全局变量(也叫成员变量)。顾名思义,全局变量的范围肯定是比局部变量的范围广的,首先说一下全局变量。
全局变量:
直接在类中声明的变量就叫做全局变量(即成员变量)
例如这段代码中,x,falg等变量都是在类中直接声明的,所以它们都是全局变量。
全局变量可以在其所在的整个类中被应用,并且定义时没有先后顺序,图中代码main方法写在flag声明的上端,而flag仍然可以被输出体现了这一点。但是为了增强代码的可读性,最好还是在类的顶部就声明好。
局部变量:
•方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。
•作用域范围从定义的位置开始到其所在语句块结束。
public class Student{
{
int x=9;
System.out.println(x);
}
public static void show(int arg) {
if(arg == 1) {
int y =2;
System.out.println(y);
}
System.out.println(arg);
}
public static void main(String[] args) {
new Student();
show(1);
}
}
例如在这段代码中,x是直接在语句块中定义的局部变量,arg是在方法参数中的局部变量,y是在方法中定义的局部变量,输出结果为9 2 1。
全局变量和局部变量在声明时有一个很大的区别:
全局变量在声明时若未进行初始化,那么系统将会根据变量的数据类型自动分配初始值:int分配初始值0,Boolean分配初始值false,char分配初始值空,而自定义类型则分配初始值null。
而局部变量则在声明后以及应用前必须进行初始化或赋值,因为局部变量没有默认值。
public class Student{
public static void main(String[] args) {
int x;
System.out.println(x);
}
}
像这样,声明x后没有初始化或者赋值就应用,程序会报错。
值得注意的是,如果局部变量与全局变量名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。
例如:
public class Student{
int x;
public static void main(String[] args) {
int x=9;
System.out.println(x);
}
}
在这段代码中,局部变量和全局变量都叫x,而输出的结果为9,显然,由于变量同名,全局变量在这个方法中失效,x仅仅作为局部变量存在。如果想要在这个局部变量的作用范围内用到其同名的全局变量,则需要关键字this来引用。
public class Student{
int x;
public static void main(String[] args) {
int x=9;
System.out.println(this.x);
}
}
这时的输出结果就变成了0(全局变量未初始化时的默认值)。