局部变量和全局变量的区别
1、定义
直接在类中声明的变量叫成员变量又称全局变量。
方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。
2、作用范围
全局变量定义后,其作用域是其所在的整个类,全局变量的定义没有先后顺序,但最好将全局变量的定义集中在类的顶部。
局部变量的作用范围从定义的位置开始,到其所在语句块结束。
public class Student {
public String id;
public String name;
public String address;
public String mabile;
public static void print(int b) {
System.out.println(b);
if(b == 1) {
int c = 100;
System.out.println(c);
}
// System.out.println(c);
}
public static void main(String[] args) {
Student.print(1);
}
}
运行结果:
如果将该程序中的注释符去掉程序将会报错,因为变量c的作用范围只在if语句中。
3、有无默认值
全局变量有默认值。如果未对全局变量设置初始值,则系统会根据全局变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而引用类型则分配初始值null。
局部变量没有默认值,使用局部变量前必须进行初始化。
public class Student {
public String id;
public String name;
public String address;
public String mabile;
public int age;
public boolean pass;
{
int a = 100;
System.out.println(a);
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.address);
System.out.println(student.id);
System.out.println(student.mabile);
System.out.println(student.name);
System.out.println(student.pass);
System.out.println(student.age);
}
}
运行结果:
在该程序中如果不对局部变量赋初值程序将会报错。
4、如果全局变量与局部变量变量名相同
在研究这个问题之前,我们需要先了解一下静态方法对变量的调用。静态方法既可以用类名调用也可以用创建的对象调用,推荐用类名调用。非静态方法只能用创建的对象调用。静态方法可以直接调用静态变量,但如果变量是非静态的则静态方法中只能通过对象调用。
如果局部变量的变量名与成员变量的变量名相同,则在局部变量作用范围内使用的是局部变量的值,如果要使用全局变量,则需要使用关键字this。this不能用在静态方法或代码块中,如果需要在静态代码块中调用全局变量,则须通过创建对象调用或者通过类名调用。(具体操作参照上文静态方法对变量的调用。)
public class Student {
public String id;
public String name;
public String address;
public String mabile;
double a = 0;
{
System.out.println(a);
int a = 10;
System.out.println(a);
System.out.println(this.a);
}//如果局部变量的变量名和成员变量的变量名相同,则在局部变量作用范围内使用的是局部变量的值;如果使用全局变量则需要使用this.
static {
int a = 100;
System.out.println(new Student().a);
}//this不能使用在静态方法或代码块中
public static void main(String[] args) {
}
}
运行结果: