详述Java中的局部变量与全局变量

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

一、全局变量

(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不能用在静态方法或代码块中,
	}
	

此时,编译器不再报错。
                               

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值