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

今天在单位弄一个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基础——静态变量、成员变量、局部变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值