成员变量用 static 修饰和不用 static 修饰有什么区别?

1、两个变量的生命周期不同。

成员变量随着对象的创建而存在,随着对象的被回收而释放。      对象有多个
静态变量随着类的加载而存在,随着类的消失而消失。                类只有一个
====================================================================

对比对象的生命周期和类的生命周期,可以用下面的生活比喻来解释:

考虑一个动物园,动物园中有很多种类的动物,每种动物都可以被看作是一个类,而每个实际的动物则是一个对象。

对象的生命周期可以比喻为动物的生命周期。当新的动物出生时,它被创建并加入到动物园中,这代表对象的创建。动物在动物园中生活,进行各种活动,这代表对象在程序中执行相应的操作。当动物生病、老去或其他原因离开动物园时,它会被销毁,这代表对象的销毁。

类的生命周期可以比喻为动物园的存在和管理。动物园的存在和运作不依赖于特定的动物。它作为一个整体,提供了一个容器来管理各种不同的动物。它提供了动物的养护、展示、繁殖等功能,这对应于类的静态部分,比如静态变量和静态方法。

动物园关闭或者不再管理动物时它就会停止存在,这代表类的卸载但是在动物园关闭之前,动物园可以一直存在,接纳新的动物,进行整个生命周期内的管理。同样地,一个类可以一直存在并扮演角色,支持对象的创建和管理,直到程序结束或者类被卸载

通过这个比喻,可以更好地理解对象的生命周期和类的生命周期。对象的生命周期与具体实例相关,而类的生命周期则是整个类的存在和管理。

==================================​​​​​​​=================​​​​​​​===================
2、调用方式不同。
成员变量 只能被对象调用。  new后
静态变量 可以被对象调用,还可以被类名调用 。 类名点
对象调用:p.country
类名调用 :Person.country
3、别名不同。
成员变量也称为实例变量。
静态变量称为类变量。
4、数据存储位置不同。
成员变量数据 存储在堆内存的对象中,所以也叫对象的特有数据.
静态变量数据 存储在方法区(共享数据区)的静态区(栈),所以也叫对象的共享数据.

在面向对象的程序设计中,成员变量也称为实例变量,用于存储对象的状态和数据。使用static修饰成员变量时,该变量被称为静态变量或类变量

区别如下:

1. 存储方式:非静态成员变量每个对象都有其自己的拷贝(每个实例的对象都有自己的空间存储这些非静态变量)而静态变量在所有对象之间共享存储空间属于类的

2. 访问方式:非静态成员变量只能通过对象实例来访问,而静态变量可以直接通过类名来访问,不需要创建对象实例。

3. 初始化时机:非静态成员变量在对象创建时初始化并在每个对象中维护其自己的值。静态变量在类加载时初始化,并在整个类的所有对象之间共享相同的值。

4. 生命周期:非静态成员变量的生命周期与其所属对象相关联,当对象被销毁时,非静态成员变量也被销毁。静态变量的生命周期与类的生命周期相关联,当类被加载时创建,当类被卸载时(删掉)销毁。

5. 内存使用:非静态成员变量占用堆内存属于对象,每个对象都会分配一块内存。静态变量占用方法区内存(栈),只分配一块内存,所有对象共享

一般情况下,静态变量适用于对所有实例都共享的数据,如常量、计数器等。非静态变量适用于对每个实例具有独立状态的数据。在选择时,需要根据实际需求和设计考虑使用哪种类型的成员变量。

假设我们有一个家庭,家庭成员有父亲、母亲和孩子。我们可以把成员变量比喻为他们的个人物品。

现在,考虑以下两种情况:

1. 不使用static修饰成员变量:
   如果我们不使用static修饰成员变量,那么每个家庭成员都会有自己的私人物品。例如,每个人都有自己的衣服、书籍等。这些物品在家庭中是独立的,而且每个人可以根据自己的需求和喜好来自由选择和修改。

2. 使用static修饰成员变量:
   如果我们使用static修饰成员变量,那么某些物品将成为共享物品。例如,假设我们有一个共用的车库放置汽车和自行车这个车库就可以被整个家庭中的每个成员使用和共享。无论是父亲、母亲还是孩子,都可以随时进入车库,使用汽车或自行车。这表示车库是静态的,属于家庭的共同资源

通过这个比喻,我们可以更好地理解成员变量使用static修饰和不使用static修饰的区别。静态成员变量就像是家庭中的共享物品,所有成员都可以访问和修改它。而非静态成员变量则是每个成员独立拥有的个人物品,只能通过对象实例来访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值