利用计算机程序解决问题,离不开变量的使用,而根据作用范围的不同,有局部变量与全局变量之分,本篇就详述一下局部变量与全局变量。
一、全局变量
(1)定义位置:定义在类的内部,方法的外部。
(2)作用域:在其所在类内的所有方法均可调用。
(3)全局变量具有默认初始值。
在eclipse内运行如下代码:
public class Student {
public int id;
public String name; //全局变量
public char mobile; //有默认值
public double address; //作用域
public boolean sex;
public void study() {
System.out.println("正在学习......");
}
public void sleep() {
System.out.println("正在学习......");
}
public static void main(String[] args) {
Student student=new Student(); //称之为引用类型,用地址传递
System.out.println(student.id);
System.out.println(student.name);
System.out.println(student.mobile);
System.out.println(student.address);
System.out.println(student.sex);
}
}
运行结果如下图
可见,全局变量可在其所在类内的其他方法中被调用,且具有初始值,int型默认为0,String型默认为null,字符型默认为空,double型默认为0.0,布尔型默认为false。
二、局部变量
相比全局变量,局部变量的特点更加复杂。
(1)定义位置:1.代码块2.方法参数列表,方法体内定义的变量
(2)作用域:从其定义位置开始到其所在的直接语句块结束
(3)局部变量没有默认值,使用时需要赋初值
下面利用代码示例来一一验证:
在eclipse中运行如下代码:
public class Student {
{
int a=12 ; //非静态代码块,创建对象时执行
System.out.println(a);
if(a==12) {
int c = 2;
System.out.println(c);
}
}
public static void main(String[] args) {
new Student();
}
}
运行结果如下图:
因此,局部变量只能在其所定义的范围内使用,若在范围外调用,编译器则会报错,如下图:
局部变量没有初始值,未赋初值直接进行操作,编译器也会报错,如下图:
综上,就是对全局变量与局部变量在特点上的阐明与代码的实例验证。
拓展:
double a = 0;
{
System.out.println(a);
int a=100;
System.out.println(a);/*如果局部变量的变量名与成员变量的变量名相同,
*则在局部变量作用范围内使用的是局部变量的值;
*如果使用全局变量,则需要使用this
*/
}
在eclipse中创建项目,输入上方代码,注意观察:
最上方定义的a为全局变量,43行与45行的变量a的颜色是统一的,而46和47行的变量a的颜色是统一的。因此如果局部变量的变量名与成员变量的变量名相同,则在局部变量作用范围内使用的是局部变量的值;如果使用全局变量,则需要使用this,使用后如下图:
此时43,45,47行的变量a就统一了起来。
另外,静态方法中可直接调用静态变量;但若变量是非静态,则静态方法中只能通过对象调用。
将上方代码块变为静态代码块,则有:
static {
System.out.println(a);
int a=100;
System.out.println(a); //this不能用在静态方法或代码块中,
}
编译器会报错:
因为在代码块外定义的变量a为非静态变量,若要调用,必须通过对象来调用。
static {
System.out.println(new Student().a);
int a=100;
System.out.println(a); //this不能用在静态方法或代码块中,
}
此时,编译器不再报错。