java中的全局变量与局部变量的区别


很多人在刚开始学习编程时,都会被全局变量和局部变量搞得头晕脑胀。我对此从以下方面进行区分;

学习之前必须了解的基础知识

  • 局部变量(Local Variable):定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。

  • 全局变量(Global Variable):所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件

一、定义的位置

  • 局部变量:定义在方法内部;
  • 全局变量:直接写在类当中;
public class Student{
	private int age;//全局变量
	public String name;//全局变量

	public test() {
		int num;//局部变量
	}
}

二、作用的范围

  • 全局变量:整个类都可以使用;
  • 局部变量:只能在定义他的方法里面使用,出了方法就不能使用;
public class Student{
	private int age;//全局变量
	public String name;//全局变量

	public test() {
		int num;//局部变量
		//局部变量只能在当前方法里使用;但是全局变量可以在该类里任何地方使用;
		System.out.println(this.age + num);
	}

	public test2() {
	//全局变量的使用;上面方法的num不能在当前方法中使用,因为他是局部变量
		System.out.println(this.age + " : " + this.name);
	}
}

三、默认值

  • 全局变量:有默认值;
    如果是整数 : 默认是0;
    如果是浮点数 :默认是0.0;
    如果是字符 :默认是“\u0000”;
    如果是布尔 :默认是false;
    如果是引用类型 :默认是null;
  • 局部变量:没有默认值;
    注意:局部变量没有默认值,如果想使用必须手动进行赋值;在Java里面,局部变量如果不进行赋值,那么在使用时就会报错;
public class Student{
	private int age;//全局变量,有默认值0;
	public String name;//全局变量,有默认值null;

	public test() {
		int num = 0;//局部变量,没有默认值,所以必须手动赋值;
		//如果没有对num进行手动赋值,那么在下面使用时就会报错;
		Sysout.out.println(num + 2);
	}
}
  • 没有对age进行手动赋值,所以在使用时就会报错;
    在这里插入图片描述
  • 进行手动赋值后,错误就会消失;
    在这里插入图片描述

四、内存位置

  • 局部变量:位于栈内存;这里也就解释清楚了为什么局部变量只能在他所在的方法区里面使用;原因就是,方法运行需要进栈,进栈后该方法的局部变量才会存在,而当该方法运行完成后就需要出栈,出栈之后局部变量也就跟着一起消失。

  • 全局变量:位于堆内存;程序在运行时,就会将该类的class文件加载进来,从而该类里面的全局变量也就会随之被加载进来,所以只要class文件存在,那么该全局变量就存在。这就是为什么全局变量可以在整个类中起作用;

五、生命周期

  • 局部变量:随着方法进栈而产生的,随着方法出栈而消失;所以局部变量的存活时间和该方法有关;
  • 全局变量:随着对象的创建而出现,随着垃圾回收机制的回收而消失;所以全局变量的存活时间和垃圾回收机制的运行有关;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值