(超全的)成员变量和局部变量以及两者区别

首先简单的说说变量,由于变量被定义出来以后只是暂存在内存中,等到程序执行到某个点时,该变量就会被释放掉,也就是说变量是有生命周期的。所以我们在程序中会根据变量的“有效范围”将变量分为成员变量和局部变量。

  • 成员变量:我们也可以称之为全局变量。从声明的角度看,它是声明在类中,方法外的,所以它在整个类中都有效;从存储位置的角度看,成员变量存在于堆内存中,和类一起创建。因此它的生命周期是随着对象的创建而存在,随着对象的消失而消失。类的成员变量可以分为两种,既静态变量和实例变量。举个例子:
    Class var{
    int x=45;
    static int y=90;
    }
    这其中x为实例变量,y为静态变量(也就是类变量)。如果说在成员变量的类型前面加一个static关键字,这样的成员变量称为静态变量。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内;对于静态变量除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类中使用。类变量的生命周期是从该类的准备阶段就开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;而实例变量从该类的实例被创建起开始存在,直到这个系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
    而且只要类存在,类就可以访问类变量(类.类变量);相对的实例变量也是如此。成员变量无需显示初始化,只要为一个类定义了类变量或者实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。
  • 局部变量:我们把在类的方法中声明的变量(方法内部定义,“{”与“}”之间的代码中声明的变量)称之为局部变量。实际上在类的方法中声明的变量,包括方法的参数都属于局部变量。局部变量只在当前定义的方法内有效,不能用于累的其他方法中。具体的说就是局部变量的生命周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配一块内存空间(也就是在栈中分配一块空间),当方法调用结束时,则会释放方法中的局部变量占用的内存空间,此时局部变量也会被销毁。
    具体的局部变量可以按照定义形式的不同分为三种:
  1. 形参:在定义方法签名时定义的变量,它的作用域时从定义该变量的地方生效,到该方法结束时失效。
  2. 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
  3. 代码块局部变量:这个局部变量的作用域从定义该变量的地方生效,到该代码结束时失效。一个变量只在一对{}中起作用。
    注意:局部变量可以与成员变量名字相同,但此时成员变量将会被隐藏,既这个成员变量在此方法中暂时失效。如果需要在这个方法中引用被覆盖的成员变量,则使用this(实例变量用这个)或者类名(类变量用这个)作为调用者来限定访问成员变量。
    局部变量必须是要进过显示初始化之后才能使用,系统不会为局部变量执行初始化,只有初始化以后,系统才会为局部变量分配内存空间

上面介绍了两者的概念,我给大家整理了一下两者的区别:

  1. 在类中的位置:
    成员变量:在类中方法体外面
    局部变量:方法中(而形参则在方法声明中)
  2. 声明周期:
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的结束调用而消失
  3. 在内存中位置:
    成员变量:在堆内存中
    局部变量:在栈内存中
  4. 是否需要初始化:
    成员变量:无需人为设置,系统会自动给与默认值
    局部变量:需要人为赋予初始值,否则无法使用,系统不会自动设置

其实对于初学者来说两者的区别没有必要刻意的去记,你只需要深刻理解上面两者的定义就可!
(参考文献:百度百科—Java的成员变量和局部变量)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值