弄清楚静态变量、成员变量、局部变量以及静态变量的使用范围

本文深入探讨Java中的三种变量类型:静态变量、成员变量和局部变量。重点讲解了静态变量的特性,包括其如何被不同类调用及改变,以及在不同包间调用的条件。此外,还提供了实例演示,帮助读者更好地理解Java变量的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在单位弄一个Java错误记录参数的项目,由于不能把参数直接传递到方法里面,调用后只是按值传递,引用也不会改变。所以需要借助实例来改变值。发现自己对于Java变量的基础不够扎实,就去网上查查资料做一下知识补录。
下面是正文:

1.静态变量 也叫类变量,随着类的加载而分配在存储空间,存储在方法区,不用创建什么对象就可以调用,并且可以被所有的实例和类调用,有点像全局变量那种。可以直接通过类名.变量名来访问。例如Test.i。会默认初始化。

2.成员变量 也叫实例变量或非静态变量,这个应该用得最多,就是实例化的时候就会生成,实例化结束的时候就会销毁,成员变量在堆内存里面,一般只能被对象调用。堆内存的变量都会进行默认初始化。

3.局部变量 形参、方法内定义的变量、代码块中定义的变量。按照我的理解就是for、while里面的代码一部分生成的临时变量,存放于栈内存,没有进行默认初始化,类似for(int i = 0; i <10; i++)。

那么问题来了,
一个类中的静态变量,是否能被其他类调用并且进行值的改变。我们来试验一下

在这里插入图片描述
这张图解决了静态变量的这个问题:
首先Test和Test1是test包下的不同类,
经过第二阶段实验证明,相同类下可以调用并改变静态变量,
而且第三阶段证明 相同包 不同类 的Test1可以改变Test类下的static静态变量。

那么不同包的情况呢,我们再来看看下面这个截图。
在这里插入图片描述
需要把Test类下的static milk写成public公共类型,执行结果就跟相同包下的结果是一样的。(顺便复习一下public类型)

建议在全部符合下列条件的情况下才使用静态变量:

(1)变量所包含的对象体积较大,占用内存较多

(2)变量所包含的对象生命周期较长

(3)变量所包含的对象数据稳定

(4)该类的实例有对该变量包含对象的共享需求

总结:static静态变量可以被同包不同类下的调用改变,相当于全局变量,但是要被不同包下的类调用需要声明为public类型。
由此可以看出static静态变量在类加载的时候只加载一次。

参考以下:
Java基础——静态变量、成员变量、局部变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值