利用计算机程序解决问题,离不开变量的使用,而根据作用范围的不同,有局部变量与全局变量之分,本篇就详述一下局部变量与全局变量。

一、全局变量

(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);
	}
}

运行结果如下图

java全局变量何时被初始化 java的全局变量_局部变量

可见,全局变量可在其所在类内的其他方法中被调用,且具有初始值,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();
		
	}
}

运行结果如下图:

java全局变量何时被初始化 java的全局变量_java全局变量何时被初始化_02

因此,局部变量只能在其所定义的范围内使用,若在范围外调用,编译器则会报错,如下图:

java全局变量何时被初始化 java的全局变量_System_03

局部变量没有初始值,未赋初值直接进行操作,编译器也会报错,如下图:

java全局变量何时被初始化 java的全局变量_全局变量_04

综上,就是对全局变量与局部变量在特点上的阐明与代码的实例验证。

拓展:

double a = 0;
	{
		System.out.println(a);
		int a=100;
		System.out.println(a);/*如果局部变量的变量名与成员变量的变量名相同,
                               *则在局部变量作用范围内使用的是局部变量的值;
                               *如果使用全局变量,则需要使用this
                               */
	}

在eclipse中创建项目,输入上方代码,注意观察:

java全局变量何时被初始化 java的全局变量_局部变量_05

最上方定义的a为全局变量,43行与45行的变量a的颜色是统一的,而46和47行的变量a的颜色是统一的。因此如果局部变量的变量名与成员变量的变量名相同,则在局部变量作用范围内使用的是局部变量的值;如果使用全局变量,则需要使用this,使用后如下图:

java全局变量何时被初始化 java的全局变量_局部变量_06

此时43,45,47行的变量a就统一了起来。

另外,静态方法中可直接调用静态变量;但若变量是非静态,则静态方法中只能通过对象调用。

将上方代码块变为静态代码块,则有:

static {
		System.out.println(a);
		int a=100;
		System.out.println(a);							//this不能用在静态方法或代码块中,
	}

编译器会报错:

java全局变量何时被初始化 java的全局变量_System_07

因为在代码块外定义的变量a为非静态变量,若要调用,必须通过对象来调用。

static {
		System.out.println(new Student().a);
		int a=100;
		System.out.println(a);				//this不能用在静态方法或代码块中,
	}

java全局变量何时被初始化 java的全局变量_java全局变量何时被初始化_08

此时,编译器不再报错。