Java关于多次实例化对象,static修饰的静态变量的变化

今天恰巧学习到静态变量与静态方法相关的知识,然后却因为这个代码陷入了沉思

public class Post {

    private String title;
    private String content;
    
    public static int count = 0;
    
    public Post(){
        count++;
    }
}

每个Post实例都独立的拥有title和content属性,此时修改这两个字段的值
对其他Post实例不会有影响,但是当看到count在每次实例化的时候都会+1而不会归零
我就感到疑惑了

于是向CSDN的大家发出了提问求助各位老哥:
Java关于多次实例化对象,static修饰的静态变量的变化问题

对象实例化会先加载无参构造方法。static会在类加载时赋值,但在对象实例化的时候还会调用无参构造方法,所有count会加1
类加载的时候才会执行static的赋值,只有一次,也就是编译的时候就已经有值了,每次实例化的时候不会运行了
——此时彼刻的蜗牛

count用static修饰的,所以每次实例化不会重新创建新的count,static修饰的变量,又称为类变量,也就是说这个变量是属于类的,类的所有实例共享这个变量,可以直接通过类名.变量名的方式获取,静态变量在内存中只存在一份
——weixin_44513087

也就是说,static的赋值只会在类加载的时候才会运行,在类中只会初始化一次
而非static赋值的就是普通变量,他们会在每一次实例化的时候初始化

所以每一个新的对象都有一个独一无二的普通变量,但是所有对象都只有同一个静态变量。

而且每次对象实例化的时候会优先加载无参的构造方法,static只会在类加载的时候赋值
但是在对象实例化的时候还是会调用无参构造方法,所以每实例化一次,count都会+1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值